题意:有n个数编号从0→n-1,两种操作: 
           Q L R:询问编号为L→R-1的数中共有多少种不同的数  
           M X Y:将编号为X的数改为Y 
           共有m个操作

题目 链接 :  https://vjudge.net/problem/UVA-12345

#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define dep(i,j,k) for(int i=k;i>=j;i--)
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,0,sizeof(i))
#define make(i,j) make_pair(i,j)
using namespace std;
const int N=1e6+;
int a[N],pos[N],num[N],now[N],ans[N],l=,r=,tmp;
struct noq {
int l,r,id,t;
}q[N];
struct noc {
int x,old,ne;
}c[N];
bool cmp(noq a,noq b) {
if(pos[a.l]==pos[b.l]) {
if(pos[a.r]==pos[b.r]) return a.t<b.t;
return pos[a.r]<pos[b.r];
}
return pos[a.l]<pos[b.l];
}
void add(int x,int d) {
num[x]+=d;
if(d> && num[x]==) tmp++;
else if(d< && num[x]==) tmp--;
}
void go(int x,int ne) {
if(l<=x && x<=r) {
add(a[x],-); add(ne,);
}
a[x]=ne;
}
int main() {
int n,m; int head=,tail=;
scanf("%d %d",&n,&m); int M=(int)pow(n,0.666666);
rep(i,,n) {
scanf("%d",&a[i]);
now[i]=a[i];
pos[i]=(i-)/M;
}
rep(i,,m) {
char ch[]; int x,y;
scanf("%s",ch);
scanf("%d %d",&x,&y); x++;
if(ch[]=='Q') q[++head]=(noq){x,y,head,tail};
else {
c[++tail]=(noc){x,now[x],y};
now[x]=y;
}
}
sort(q+,q++head,cmp); int t=;
rep(i,,head) {
while(t<q[i].t) go(c[t+].x,c[t+].ne),++t;
while(t>q[i].t) go(c[t].x,c[t].old),--t;
while(l<q[i].l) add(a[l++],-);
while(l>q[i].l) add(a[--l],);
while(r<q[i].r) add(a[++r],);
while(r>q[i].r) add(a[r--],-);
ans[q[i].id]=tmp;
}
rep(i,,head) printf("%d\n",ans[i]);
return ;
}

最新文章

  1. nginx在linux下安装
  2. Google Chrome开发者工具
  3. IPC_共享内存
  4. cocos2dx json数据解析
  5. Maven解决Missing artifact com.sun:tools:jar:1.5.0错误
  6. [转] React Native Navigator — Navigating Like A Pro in React Native
  7. [android开发之内容更新类APP]二、这几日的结果
  8. mysql学习(八)数据表类型-字符集
  9. Error pulling origin: error: Your local changes to the following files would be overwritten by merge
  10. Django中请求的生命周期
  11. selenium自动化测试——常见的八种元素定位方法
  12. 【MM系列】SAP MB1A MB1B MB1C MB11 MIGO的区别解析
  13. commons-lang3-3.2.jar中的常用工具类的使用
  14. find_first_zero_bit在使用gcc 4.2.4 编译时,需要保护%eax
  15. vue axios请求/响应拦截器
  16. kvm 创建新虚拟机命virt-install 使用说明
  17. sqlserver将数据库的数据导成excel文档方法
  18. Ubuntu apt-get方式安装Subversion
  19. JQuery学习---JQuery深入学习
  20. 移动端车牌识别/车牌OCR识别

热门文章

  1. sqlserver时间戳
  2. C# 在运行中拖拽,改变控件大小位置类(转载)
  3. ELK日志分析系统的搭建
  4. 减少打包组件vue.config.js——Webpack的externals的使用
  5. [JZOJ5888]GCD生成树
  6. 在Linux下执行Jmeter脚本
  7. phpstorm+xdebug+mvc
  8. vagrant 搭建开发环境
  9. flask 反向解析示例
  10. golang的select实现原理剖析