维护队列 bzoj-2453

题目大意:给定一个n个数序列,支持查询区间数的种类数,单点修改。不强制在线。

注释:$1\le n,m\le 10^5$。


想法

带修改莫队裸题。

如果没有修改操作的话,我们就正常按照莫队一样左右移动区间即可。

有了修改操作的话,我们把块变成$n^{\frac{2}{3}}$,关键字变成:左端点所在块、右端点所在块和时间戳。

然后暴力就行了。

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=10003;
struct Query{int l,r,Tim,ID;}q[N];
struct Change{int pos,New,Old;}c[N];
int n,m,s[N],color[N*100],t,Time,now[N],unit,Be[N],ans[N],Ans,l=1,r,T;
inline bool cmp(const Query &a,const Query &b)
{
return Be[a.l]==Be[b.l]?(Be[a.r]==Be[b.r]?a.Tim<b.Tim:a.r<b.r):a.l<b.l;
}
inline void revise(int x,int d) {color[x]+=d; if(d>0) Ans+=color[x]==1; if(d<0) Ans-=color[x]==0;}
inline void going(int x,int d) {if(l<=x&&x<=r) revise(d,1),revise(s[x],-1); s[x]=d;}
int main()
{
scanf("%d%d",&n,&m); unit=pow(n,0.666666);
for(int i=1;i<=n;i++) scanf("%d",&s[i]),now[i]=s[i],Be[i]=i/unit+1;
for(int i=1;i<=m;i++)
{
char s[10]; int x,y;
scanf("%s%d%d",s+1,&x,&y);
if(s[1]=='Q') q[++t]=(Query){x,y,Time,t};
if(s[1]=='R') {c[++Time]=(Change){x,y,now[x]},now[x]=y;}
}
// printf("Fuck %d\n",t);
sort(q+1,q+t+1,cmp);
for(int i=1;i<=t;i++)
{
while(T<q[i].Tim) going(c[T+1].pos,c[T+1].New),T++;
while(T>q[i].Tim) going(c[T].pos,c[T].Old),T--;
while(l<q[i].l) revise(s[l],-1),l++;
while(l>q[i].l) revise(s[l-1],1),l--;
while(r<q[i].r) revise(s[r+1],1),r++;
while(r>q[i].r) revise(s[r],-1),r--;
ans[q[i].ID]=Ans;
}
for(int i=1;i<=t;i++) printf("%d\n",ans[i]);
return 0;
}

小结:莫队其实就是暴力啊。

最新文章

  1. 人才市场的IT职位分析
  2. Understanding delete
  3. linux原始套接字(3)-构造IP_TCP发送与接收
  4. PHP filesystem attack vectors
  5. 高级智能研究计划(IARPA):大脑皮层建模
  6. express创建项目
  7. 基于 SOA 的组件化业务基础平台
  8. Ext.Net学习笔记17:Ext.Net GridPanel Selection
  9. FC网络学习笔记02 -网络配置方法
  10. GMP大法教你重新做人(从入门到实战)
  11. Python中星号的本质和使用方式
  12. Supervisor安装与使用
  13. 缺少新的栈标识:报出异常FLAG_ACTIVITY_NEW_TASK flag-是由于activity关闭之后开启一个新的acitivity时没有标识在栈中,所以需要给一个栈标识
  14. 4.7Python数据处理篇之Matplotlib系列(七)---matplotlib原理分析
  15. Java开发面试题汇总整理
  16. 通过GitHub和GoDaddy搭建静态个人博客
  17. mfc调用cmd执行完保留黑框
  18. 1.1.1 vue-cli脚手架工具
  19. 微信小程序开发——前端如何区分小程序运行环境
  20. 【读书笔记】iOS-网络-HTTP-请求内容

热门文章

  1. .net主站和二级域名下实现session共享
  2. Uediter的引用和取值
  3. SpringBoot_整合视图层技术
  4. 微信小程序组件解读和分析:八、checkbox复选项
  5. Java并发——volatile关键字的使用
  6. windows sdk编程隐藏窗体标题栏
  7. CAD参数绘制块引用对象(网页版)
  8. JS日期,金钱处理
  9. svn in xcode5
  10. python3.x Day6 paramiko