社区讨论

蒟蒻刚接触OI,水set莫名其妙WA第三个点求救

P1110[ZJOI2007] 报表统计参与者 9已保存回复 16

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
16 条
当前快照
1 份
快照标识符
@mi7x0i2o
此快照首次捕获于
2025/11/21 05:00
4 个月前
此快照最后确认于
2025/11/21 06:36
4 个月前
查看原帖
CPP
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<set>
#include<cmath>
#define N 1000086
#define INF 999999999
using namespace std;
set<int>s1;
set<int>::iterator si,sj;
multiset<int>s2;
int a[N],b[N],n,m;
int mingap=INF;
int main(){
    s1.insert(INF),s1.insert(-INF);
    s2.insert(INF);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) {
        scanf("%d",&a[i]),s1.insert(a[i]);
        b[i]=a[i];
        if(i>1) s2.insert(abs(a[i]-a[i-1]));
    } 
    for(int i=1;i<=n;i++) {
        int k=*s1.upper_bound(a[i]);
        s2.insert(abs(k-a[i]));
        if(s1.count(a[i])>1) mingap=0;
        mingap=min(mingap,(abs(a[i]-*s1.upper_bound(a[i]))));
    }
    for(int j=1;j<=m;j++){
        char c[20];
        scanf("%s",c);
        int i,k;
        if(c[0]=='I'){
            scanf("%d%d",&i,&k);
            if(i<n) sj=s2.find(abs(b[i]-a[i+1]));
            if(i<n) s2.erase(sj);
            if(i<n) s2.insert(abs(a[i+1]-k));
            s2.insert(abs(b[i]-k));
            b[i]=k;
            si=s1.lower_bound(k);
            int x=*si;mingap=min(mingap,abs(x-k));
            si--;int y=*si;mingap=min(mingap,abs(y-k));
            s1.insert(k);	
            continue;
        }
        else if(c[4]=='S'){
            printf("%d\n",mingap);
        } 
        else{
            si=s2.begin();
            int ans=*si;
            printf("%d\n",ans);
        }
    }
    return 0;
} 

回复

16 条回复,欢迎继续交流。

正在加载回复...