社区讨论

样例过了,但是诡异全RE,求调

P1903【模板】带修莫队 / [国家集训队] 数颜色 / 维护队列参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mlkagxkn
此快照首次捕获于
2026/02/13 10:49
6 天前
此快照最后确认于
2026/02/15 21:35
4 天前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+5;
ll mp[N],a[N],sum,maxn,n,m,rcnt,qcnt,ans[N];
struct node{
	int id,t,l,r;
	bool operator<(const node &x)const{
		if(l/maxn!=x.l/maxn) return l<x.l;
		else if(r/maxn!=x.r/maxn) return r<x.r;
		else return t<x.t;
	}
}c[N];
struct updata{
	ll older_place,laster;
}d[N];
void add(int x)
{
	if(!mp[x]) sum++;
	mp[x]++;
}
void del(int x)
{
	mp[x]--;
	if(!mp[x]) sum--;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	maxn=sqrt(n);
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=1;i<=m;i++)
	{
		char op;int x,y;
		cin>>op;
		if(op=='Q')
		{
			qcnt++;
			cin>>x>>y;
			c[qcnt].id=qcnt;c[qcnt].t=rcnt;c[qcnt].l=x;c[qcnt].r=y;
		}
		if(op=='R')
		{
			rcnt++;
			cin>>x>>y;
			d[rcnt].older_place=x;
			d[rcnt].laster=y;
		}
	}
	sort(c+1,c+qcnt+1);
	int t=0,l=1,r=0;
	for(int i=1;i<=qcnt;i++)
	{
		while(l>c[i].l) add(a[--l]);
		while(r<c[i].r) add(a[++r]);
		while(l<c[i].l) del(a[l++]);
		while(r>c[i].r) del(a[r--]);
		while(t<c[i].t)
		{
			t++;
			if(d[t].older_place>=l&&d[t].older_place<=r)
			{
				del(a[d[t].older_place]);
				add(d[t].laster);
			}
			swap(a[d[t].older_place],d[t].laster);
		}
		while(t>c[i].t)
		{
			if(d[t].older_place>=l&&d[t].older_place<=r)
			{
				del(a[d[t].older_place]);
				add(d[t].laster);
			}
			swap(a[d[t].older_place],d[t].laster);
			t--;
		}
		ans[c[i].id]=sum;
	}
	for(int i=1;i<=qcnt;i++)
	{
		cout<<ans[i]<<"\n";
	}
	return 0;
}
~自认为马蜂良好~

回复

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

正在加载回复...