标签:
http://acm.fzu.edu.cn/problem.php?pid=2022
刚开始MLE,用map对应,果断爆内存了,然后改用去重,离散化, lowbound查找元素位置,速度还不错,不过pushup写也是醉了,一遍遍错,最后发现
if(o[rt].left==INF||o[rt].right==INF||o[rt].left==o[rt].right)l=INF;这一句第三个判断必须加,发现这样可以避免那种只由一个点往上更新的错误,也是非常的伤感。。。。。
/*96655 ‘s source code for D Memory: 30072 KB Time: 265 MS Language: GNU C++ Result: Accepted */ #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<vector> #include<stack> #include<cmath> #include<queue> #include<map> using namespace std; const int maxn=500000+10; const int INF=1e9+7; struct asd { int x; char c; } q[maxn]; bool vis[maxn]; int a[maxn]; struct node { int left,right,v; } o[maxn<<2]; void pushup(int rt) { o[rt].left=min(o[rt*2].left,o[rt*2+1].left); if(o[rt*2+1].right!=INF) o[rt].right=o[rt*2+1].right; else o[rt].right=o[rt*2].right; int l=fabs(o[rt*2].right-o[rt*2+1].left); if(o[rt].left==INF||o[rt].right==INF||o[rt].left==o[rt].right)l=INF; o[rt].v=min(min(o[rt*2].v,o[rt*2+1].v),l); } void build(int rt,int l,int r) { if(l==r) { o[rt].left=o[rt].right=o[rt].v=INF; return; } int m=(l+r)>>1; build(rt*2,l,m); build(rt*2+1,m+1,r); pushup(rt); } void change(int rt,int l,int r,int pos,int p) { if(l==r) { if(p)o[rt].left=o[rt].right=a[l-1]; else o[rt].left=o[rt].right=INF; return; } int m=(l+r)>>1; if(pos<=m)change(rt*2,l,m,pos,p); else change(rt*2+1,m+1,r,pos,p); pushup(rt); } int main() { int T; char s[5]; while(~scanf("%d",&T)) { int cnt=1,sum=0,k=0; for(int i=1; i<=T; ++i) { scanf("%s",s); q[i].c=s[0]; if(s[0]==‘m‘)continue; scanf("%d",&q[i].x); a[k++]=q[i].x; } sort(a,a+k); for(int i=1; i<k; i++) if(a[i]!=a[i-1])a[cnt++]=a[i]; build(1,1,cnt); memset(vis,0,sizeof(vis)); for(int i=1; i<=T; i++) { if(q[i].c==‘a‘) { int pos=lower_bound(a,a+cnt,q[i].x)-a; pos++; if(vis[pos])continue; vis[pos]=1; ++sum; change(1,1,cnt,pos,1); } else if(q[i].c==‘d‘) { int pos=lower_bound(a,a+cnt,q[i].x)-a; pos++; if(!vis[pos])continue; vis[pos]=0; --sum; change(1,1,cnt,pos,0); } else { if(sum<2)printf("0\n"); else printf("%d\n",o[1].v); } } } return 0; }
唯一值得欣慰的是速度还不错。。。。QAQ
标签:
原文地址:http://www.cnblogs.com/shuguangzw/p/4937543.html