社区讨论
带修莫队80求条
P2464[SDOI2008] 郁闷的小 J参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mhjujchn
- 此快照首次捕获于
- 2025/11/04 08:44 4 个月前
- 此快照最后确认于
- 2025/11/04 08:44 4 个月前
TLE
CPP#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[200005],to[200005];
struct node{int l,r,x,t,id;}b[200005];
struct nod{int a,p;}c[200005];
inline bool cmp(const node &p,const node &q){
if(to[p.l]!=to[q.l])return p.l<q.l;
if(to[p.r]!=to[q.r])return p.r<q.r;
return p.t<q.t;
}
unordered_map<int,int>mp;
inline void chang(int &p,int &L,int &R){
int pos=c[p].a,to=c[p].p;
if(pos>=L&&pos<=R){
mp[a[pos]]--;
mp[to]++;
}
swap(c[p].p,a[pos]);
}
inline void add(int &p){mp[a[p]]++;}
inline void del(int &p){mp[a[p]]--;}
int ans[200005];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
int N=pow(n,2.0/3.0);
for(int i=1;i<=n;i++)cin>>a[i],to[i]=(i-1)/N+1;
int time=0;
for(int i=1;i<=m;i++){
char op;int l,r,x;
cin>>op>>l>>r;
if(op=='Q')cin>>b[i-time].x,b[i-time].l=l,b[i-time].r=r,b[i-time].t=time,b[i-time].id=i-time;
else c[++time].a=l,c[time].p=r;
}
sort(b+1,b+1+m-time,cmp);
int l=1,r=0,t=0;
for(int i=1;i<=m-time;i++){
int L=b[i].l,R=b[i].r,T=b[i].t;
while(l>L)add(--l);
while(r<R)add(++r);
while(l<L)del(l),l++;
while(r>R)del(r),r--;
while(t<T)chang(++t,l,r);
while(t>T)chang(t,l,r),t--;
ans[b[i].id]=mp[b[i].x];
}
for(int i=1;i<=m-time;i++)cout<<ans[i]<<'\n';
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...