社区讨论
样例过了,但是诡异全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 条回复,欢迎继续交流。
正在加载回复...