首页 > 代码库 > BZOJ 1058 报表统计 (STL)
BZOJ 1058 报表统计 (STL)
题解:数据结构的基本操作,用STL可以完美实现,就是比较慢……
#include <cstdio> #include <map> #include <set> #include <vector>#include <algorithm>const int MAXN=500005; const int INF=~0U>>1; using namespace std; int n,m; sets,tr; map<int, int>mp; vectorg[MAXN]; int a[MAXN], b[MAXN]; int main(){ scanf("%d%d",&n,&m); int mg=INF,ms=INF,pos,val; for(int i=0;i<n;i++){ scanf("%d",&a[i]); tr.insert(a[i]); b[i]=a[i]; if(i){ int k=abs(a[i]-a[i - 1]); s.insert(k); mp[k]++; } } sort(b,b+n); for(int i=1;i<n;i++)ms=min(ms,b[i]-b[i-1]); mg=*s.begin(); char op[33]; while(m--){ scanf("%s",op); if(op[4]==‘R‘){ scanf("%d%d",&pos,&val); pos--; g[pos].push_back(val); if(ms){ set::iterator it=tr.lower_bound(val); if(it!=tr.begin()){ if(it==tr.end()){ it--; ms=min(ms,abs(val-*it)); } else{ int x=*it; it--; int y=*it; ms=min(ms,abs(x-val)); ms=min(ms,abs(y-val)); } } else ms=min(ms,abs(val-*tr.begin())); } tr.insert(val); int x,y=INF; if(g[pos].size()==1)x=a[pos]; else x=g[pos][g[pos].size()-2]; if(pos+1<n){ y=a[pos+1]; int k=abs(x-y); mp[k]--; if(mp[k]==0)s.erase(k); k=abs(x-val); s.insert(k); mp[k]++; k=abs(y-val); s.insert(k); mp[k]++; mg=*s.begin(); } else{ int k=abs(x-val); s.insert(k); mp[k]++; mg=*s.begin(); } } else if(op[4]==‘G‘) printf("%d\n", mg); else printf("%d\n", ms); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。