萌新,不是妹子 P1110 stl写法RE 求救 调了快一天了!
查看原帖
萌新,不是妹子 P1110 stl写法RE 求救 调了快一天了!
41177
我杀文化课楼主2020/9/29 19:03
#include <set>
#include <cstdio>
#include <algorithm>
#include <vector>
const int inf=1e9;
using namespace std;
int abs(int a) {return a<0?-a:a;}
int n,m,minn=1e9,maxn,t[500010];
vector<int> a[500010];
multiset<int> b,bb;
int main()
{
	scanf("%d%d",&n,&m);
	bb.insert(inf); bb.insert(-inf);
	for(int i=1,x;i<=n;i++)
	{
		scanf("%d",&x);
		int xx=*bb.upper_bound(x),xxx=*--bb.upper_bound(x);
		minn=min(minn,min(abs(xx-x),abs(xxx-x)));
		a[i].push_back(x);
		bb.insert(x);
		if(i!=1) b.insert(abs(x-a[i-1].back())),t[abs(x-a[i-1].back())]=1;
	}
	for(int i=1,p,k;i<=m;i++)
	{
		char s[233];
		scanf(" %s",s+1);
		if(s[1]=='I')
		{
			scanf("%d%d",&p,&k);
			
			int xx=*bb.upper_bound(k),xxx=*--bb.upper_bound(k);
			minn=min(minn,min(abs(xx-k),abs(xxx-k)));
			bb.insert(k);
			//维护前驱后继最小值。 
			int x2=a[p].back();
			if(p<n)
			{
				int c=abs(x2-a[p+1].front());
				b.erase(b.find(c));
				int x1=abs(k-a[p+1].front());
				b.insert(x1);
				t[x1]=1;
			} //维护向后的差值 
			a[p].push_back(k);
			x2=abs(x2-a[p].back());
			b.insert(x2);//维护向前的差值 
			t[x2]=1;
		}
		if(s[5]=='G')
			printf("%d\n",*b.begin());
		if(s[5]=='S')
			printf("%d\n",minn);
	}
	return 0;
}

没怎么用过STL,今天想找一道题练练手,结果一练就是一天,求大佬找找错误吧

2020/9/29 19:03
加载中...