社区讨论
蒟蒻刚接触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 条回复,欢迎继续交流。
正在加载回复...