标题效果:给定一个序列,两种操作:
1.询[l,r]间隔多少个不同的号码
2.单点变化
n,m<=1W
树盖树?树董事长?因此不必!
暴力之前,这个问题2s,不想复杂!适当的水太!
离散化一下!标记用时间戳取代!
675B秒切!
不是一般爽。
。
。。好吧假设认为这样没啥意思能够试试树状数组套bitset 应该会快一些
总之50%达成 假期进度:66.7% 死ね
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 10010 using namespace std; int n,m,a[M],map[1001001],tot; int f[M+1000],T,ans; int main() { int i,j,x,y; char p[10]; cin>>n>>m; for(i=1;i<=n;i++) { scanf("%d",&x); if(!map[x]) map[x]=++tot; a[i]=map[x]; } for(i=1;i<=m;i++) { scanf("%s%d%d",p,&x,&y); if(p[0]=='R') { if(!map[y]) map[y]=++tot; a[x]=map[y]; } else { ans=0;++T; for(j=x;j<=y;j++) if(f[ a[j] ]!=T) ++ans,f[ a[j] ]=T; printf("%d\n",ans); } } }
版权声明:本文博主原创文章。博客,未经同意不得转载。
时间: 2024-12-28 01:42:43