社区讨论

stl求调

P1110[ZJOI2007] 报表统计参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mdclxwui
此快照首次捕获于
2025/07/21 12:30
8 个月前
此快照最后确认于
2025/11/04 04:01
4 个月前
查看原帖
只A了#1
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M=5e5+5;
int n,m,ans2=1e9;
int a[M],a1[M];
multiset<int> p,s;
signed main()
{
	// freopen("P1110_2.in","r",stdin);
	// freopen("P1110.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	a[0]=-2e9;a[n+1]=-2e9;
	p.insert(-2e9);p.insert(2e9);
	for(int i=1,x;i<=n;++i)
	{
		scanf("%lld",&x);a1[i]=a[i]=x;p.insert(x);
		s.insert(abs(x-a[i-1]));
		ans2=min(ans2,min(abs(x-*p.upper_bound(x)),abs(x-*--p.lower_bound(x))));
	}
	while(m--)
	{
		string op;
		cin>>op;
		if(op[0]=='I')
		{
			int i,k;
			scanf("%lld%lld",&i,&k);
			s.erase(s.find(abs(a1[i]-a[i+1])));s.insert(abs(a1[i]-k));s.insert(abs(k-a[i+1]));
			a1[i]=k;p.insert(k);
			ans2=min(ans2,min(abs(k-*p.upper_bound(k)),abs(k-*--p.lower_bound(k))));
		}
		else if(op[4]=='G') printf("%lld\n",*s.begin());
		else printf("%lld\n",ans2);
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...