[BZOJ1058]ZJOI2007报表统计|平衡树
2015-04-23 14:33
375 查看
没啥好说的,码力题,两棵平衡树,一棵维护相邻差值,一棵维护数,插入的时候要记得删去对应差值。。懒得写splay了,正好学一下STL(以前不喜欢写。。)
#include<cstdio> #include<iostream> #include<cstdlib> #include<set> #define N 500005 #define inf 0x3fffffff using namespace std; int n,m,i,x,k,a ,ans=inf,last ; char opt[20]; multiset<int> num,del; multiset<int>::iterator it,l; int main() { freopen("1058.in","r",stdin); scanf("%d%d",&n,&m); for (i=1;i<=n;i++) { scanf("%d",&a[i]); last[i]=a[i]; num.insert(a[i]); if (i>1) del.insert(abs(a[i]-a[i-1])); } for (it=num.begin();it!=num.end();it++) { if (it!=num.begin()) ans=min(ans,*it-*l); l=it; } num.insert(-inf);num.insert(inf); for (i=1;i<=m;i++) { scanf("%s",opt); if (opt[0]=='I') { scanf("%d%d",&x,&k); it=num.insert(k); ans=min(ans,k-*(--it));it++;it++; ans=min(ans,*it-k); it=del.find(abs(a[x+1]-last[x])); del.erase(it); del.insert(abs(last[x]-k)); del.insert(abs(k-a[x+1])); last[x]=k; } else if (opt[4]=='S') printf("%d\n",ans); else printf("%d\n",*del.begin()); } }
相关文章推荐
- BZOJ 1058 ZJOI 2007 报表统计 平衡树
- 【bzoj1058】[ZJOI2007]报表统计 平衡树
- [BZOJ 1058] [ZJOI2007] 报表统计 【平衡树】
- BZOJ 1058: [ZJOI2007]报表统计
- 【BZOJ 1058】【ZJOI 2007】报表统计【Treap】
- BZOJ1058 [ZJOI2007]报表统计 STL
- 洛谷&&BZOJ 1058 P1110 [ZJOI2007]报表统计
- bzoj 1058: [ZJOI2007]报表统计
- BZOJ 1058 - [ZJOI2007]报表统计 STL splay [挖坑待填]
- 1058: [ZJOI2007]报表统计 - BZOJ
- 【set】【multiset】bzoj1058 [ZJOI2007]报表统计
- BZOJ 1058: [ZJOI2007]报表统计 STL 维护全局和局部最优值
- [BZOJ 1058][ZJOI2007]报表统计
- 【BZOJ1058】[ZJOI2007]报表统计 STL
- [BZOJ 1058][ZJOI 2007]报表统计 平衡树+线段树
- [bzoj1058][ZJOI2007]报表统计
- AC日记——[ZJOI2007]报表统计 bzoj 1058
- bzoj1058 [ZJOI2007]报表统计
- BZOJ_1058_[ZJOI2007]报表统计_STL
- [BZOJ1058][ZJOI2007]报表统计