xg!multiset求助85pts WA on#6
查看原帖
xg!multiset求助85pts WA on#6
777809
IOI_AK_TLR楼主2023/11/13 00:18

?


#include <bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,m,a[N],na[N],ed[N];
string opt;
int loc,x;
int lst,nxt,ans=INT_MAX;
multiset<int>nums;
multiset<int>chas;
multiset<int>::iterator it;
inline void init()
{
	for(int i=0;i<N;i++)
		a[i]=ed[i]=-1;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL);
	cout.tie(NULL);
	init();
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		na[i]=a[i];
		nums.insert(a[i]);
		if(i!=1)
			chas.insert(abs(a[i]-a[i-1]));
	}
	sort(na+1,na+n+1);
	for(int i=2;i<=n;i++)
		ans=min(ans,na[i]-na[i-1]);
	for(int i=1;i<=m;i++)
	{
		cin>>opt;
		if(opt=="INSERT")
		{
			cin>>loc>>x;
			if(ed[loc]!=-1&&loc!=n)
				chas.erase(chas.find(abs(a[loc+1]-ed[loc])));
			if(ed[loc]==-1&&loc!=n)
				chas.erase(chas.find(abs(a[loc+1]-a[loc])));
			it=nums.upper_bound(x);
			if(it!=nums.end())
				lst=*(--it),ans=min(ans,x-lst);
			it=nums.lower_bound(x);
			if(it!=nums.end())
				nxt=*it,ans=min(ans,nxt-x);
			nums.insert(x);
			if(ed[loc]!=-1)
				chas.insert(abs(x-ed[loc]));
			else
				chas.insert(abs(x-a[loc]));
			if(loc!=n)
				chas.insert(abs(x-a[loc+1]));
			ed[loc]=x;
		}
		else if(opt=="MIN_GAP")
			cout<<*chas.begin()<<'\n';
		else
			cout<<ans<<'\n';
	}
	return 0;
}

2023/11/13 00:18
加载中...