【模板】分块/带修改莫队(数颜色)

思路:

  带修改莫队;

  (伏地膜xxy);

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 1000005
  4. #define maxnum 1000005
  5. int bel[maxn],blo;
  6. struct QueryType {
  7. int l,r,k,id;
  8. bool operator<(const QueryType pos)const
  9. {
  10. if(bel[l]==bel[pos.l])
  11. {
  12. if(bel[r]==bel[pos.r]) return k<pos.k;
  13. else return bel[r]<bel[pos.r];
  14. }
  15. else return bel[l]<bel[pos.l];
  16. }
  17. };
  18. struct QueryType qu[maxn];
  19. int n,m,ai[maxn],now,num[maxnum],ans[maxn];
  20. int ch[maxn],to[maxn],back[maxn],cntq,cntc;
  21. int l=,r,k;
  22. inline void in(int &now)
  23. {
  24. char Cget=getchar();now=;
  25. while(Cget>''||Cget<'') Cget=getchar();
  26. while(Cget>=''&&Cget<='')
  27. {
  28. now=now*+Cget-'';
  29. Cget=getchar();
  30. }
  31. }
  32. inline void updatak(int x,bool di)
  33. {
  34. if(di)
  35. {
  36. back[x]=ai[to[x]];
  37. ai[to[x]]=ch[x];
  38. if(to[x]<=r&&to[x]>=l)
  39. {
  40. num[back[x]]--;
  41. if(!num[back[x]]) now--;
  42. num[ch[x]]++;
  43. if(num[ch[x]]==) now++;
  44. }
  45. }
  46. else
  47. {
  48. ai[to[x]]=back[x];
  49. if(to[x]<=r&&to[x]>=l)
  50. {
  51. num[ch[x]]--;
  52. if(!num[ch[x]]) now--;
  53. num[back[x]]++;
  54. if(num[back[x]]==) now++;
  55. }
  56. }
  57. }
  58. inline void updata(int x,bool di)
  59. {
  60. x=ai[x];
  61. if(di)
  62. {
  63. if(!num[x])now++;
  64. num[x]++;
  65. }
  66. else
  67. {
  68. if(num[x]==)now--;
  69. num[x]--;
  70. }
  71. }
  72. int main()
  73. {
  74. in(n),in(m),blo=sqrt(n);
  75. for(int i=;i<=n;i++) in(ai[i]),bel[i]=(i-)/blo;
  76. char op[];
  77. for(int i=;i<=m;i++)
  78. {
  79. scanf("%s",op);
  80. if(op[]=='Q')
  81. {
  82. in(qu[++cntq].l);
  83. in(qu[cntq].r);
  84. if(qu[cntq].l>qu[cntq].r)
  85. {
  86. swap(qu[cntq].l,qu[cntq].r);
  87. }
  88. qu[cntq].id=cntq;
  89. qu[cntq].k=cntc;
  90. }
  91. else in(to[++cntc]),in(ch[cntc]);
  92. }
  93. sort(qu+,qu+cntq+);
  94. for(int i=;i<=cntq;i++)
  95. {
  96. while(k<qu[i].k) updatak(++k,true);
  97. while(k>qu[i].k) updatak(k--,false);
  98. while(r<qu[i].r) updata(++r,true);
  99. while(r>qu[i].r) updata(r--,false);
  100. while(l<qu[i].l) updata(l++,false);
  101. while(l>qu[i].l) updata(--l,true);
  102. ans[qu[i].id]=now;
  103. }
  104. for(int i=;i<=cntq;i++) printf("%d\n",ans[i]);
  105. return ;
  106. }

AC日记——【模板】分块/带修改莫队(数颜色) 洛谷 P1903的更多相关文章

  1. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  2. 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法

    [题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...

  3. 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法

    [题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...

  4. 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)

    试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...

  5. P1903 【模板】分块/带修改莫队(数颜色)

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

  6. 洛谷 P1903 【模板】分块/带修改莫队(数颜色)

    题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...

  7. luogu1903 【模板】分块/带修改莫队(数颜色)

    莫队算法模板 推荐阅读这篇博客 #include <algorithm> #include <iostream> #include <cstdio> #includ ...

  8. BZOJ.2453.维护队列([模板]带修改莫队)

    题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...

  9. BZOJ2120 数颜色(带修改莫队)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

随机推荐

  1. ACE线程管理机制-面向对象的线程类ACE_Task

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/05/583231.html 我们在前一章中使用ACE_Thread包装时,你一定已经注意到了一 ...

  2. 访问修饰符public,private,protected和default的区别?

    类的成员不写访问修饰符默认为default,默认对于同一个包的其他类相当于公开(public),对于不是同一个包的其他类相当于私有(private). 受保护(protected)对子类相当于公开,对 ...

  3. HDU1394 逆序数

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  4. php 获取周几

    date("l"); //date就可以获取英文的星期比如Sunday date("w"); //这个可以获取数字星期比如123,注意0是星期日 获取中文星期几 ...

  5. Tomcat 映射虚拟目录和程序热部署

    虚拟目录的设置 方法一:在${tomcat安装目录}/conf/Catalina/localhost目录下创建一个xml文件,任意文件名都可以,但是此文件名是web应用发布后的虚拟目录: 比如创建一个 ...

  6. Spring @Async的异常处理

    楼主在前面的2篇文章中,分别介绍了Java子线程中通用的异常处理,以及Spring web应用中的异常处理.链接如下: Java子线程中的异常处理(通用) Spring web引用中的异常处理 今天, ...

  7. PAT (Advanced level) 1003. Emergency (25) Dijkstra

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  8. Maven -- 将引用的本地jar文件打进war包里

    我们在做maven项目开发中有时候引用了本地第三方包,例如: <dependency> <groupId>org.artofsolving.jodconverter</g ...

  9. 【BZOJ】1031 [JSOI2007]字符加密Cipher

    [算法]后缀数组 [题解]把数组复制一遍然后SA处理即可. 后缀数组 #include<cstdio> #include<algorithm> #include<cstr ...

  10. Python第三方库wordcloud(词云)快速入门与进阶

    前言: 笔主开发环境:Python3+Windows 推荐初学者使用Anaconda来搭建Python环境,这样很方便而且能提高学习速度与效率. 简介: wordcloud是Python中的一个小巧的 ...