1. #include <iostream>
  2. #include <cstdio>
  3. #include <sstream>
  4. #include <cstring>
  5. #include <map>
  6. #include <set>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <cmath>
  12. #define MOD 2018
  13. #define LL long long
  14. #define ULL unsigned long long
  15. #define Pair pair<int, int>
  16. #define mem(a, b) memset(a, b, sizeof(a))
  17. #define _ ios_base::sync_with_stdio(0),cin.tie(0)
  18. //freopen("1.txt", "r", stdin);
  19. using namespace std;
  20. const int maxn = , INF = 0x7fffffff;
  21. int n, m, pos[maxn], s[], c[maxn], ans, t[maxn];
  22. int qsz, csz;
  23. struct node
  24. {
  25. int l, r, t, id, res;
  26. }Node[maxn];
  27.  
  28. void add(int l, int r, int t, int id)
  29. {
  30. Node[id].l = l;
  31. Node[id].r = r;
  32. Node[id].t = t;
  33. Node[id].id = id;
  34. }
  35. int l = , r = , T = ;
  36. struct change
  37. {
  38. int pos, Old, New;
  39. }Cha[maxn];
  40.  
  41. void add_(int pos, int New, int Old, int cnt)
  42. {
  43. Cha[cnt].pos = pos;
  44. Cha[cnt].New = New;
  45. Cha[cnt].Old = Old;
  46. }
  47.  
  48. bool cmp(node a, node b)
  49. {
  50. if(pos[a.l] == pos[b.l])
  51. {
  52. if(pos[a.r] == pos[b.r])
  53. return a.t < b.t;
  54. return pos[a.r] < pos[b.r];
  55. }
  56. return pos[a.l] < pos[b.l];
  57. }
  58.  
  59. bool cmp_id(node a, node b)
  60. {
  61. return a.id < b.id;
  62. }
  63.  
  64. void ad(int val)
  65. {
  66. s[val]++;
  67. if(s[val] == )
  68. ans++;
  69. }
  70.  
  71. void de(int val)
  72. {
  73. s[val]--;
  74. // cout<< ans <<endl;
  75. if(s[val] == )
  76. ans--;
  77. }
  78.  
  79. void go(int idx, int val)
  80. {
  81. if(l <= idx && idx <= r)
  82. {
  83. de(c[idx]);
  84. ad(val);
  85. }
  86. c[idx] = val;
  87. }
  88.  
  89. int main()
  90. {
  91. qsz = csz = ;
  92. ans = ;
  93. scanf("%d%d", &n, &m);
  94. for(int i=; i<=n; i++)
  95. {
  96. scanf("%d", &c[i]);
  97. t[i] = c[i];
  98. }
  99. int block = pow(n, 2.0/);
  100. for(int i=; i<=n; i++)
  101. pos[i] = (i-)/block + ;
  102. for(int i=; i<=m; i++)
  103. {
  104. char str[];
  105. int x, y;
  106. scanf("%s%d%d", str, &x, &y);
  107. if(str[] == 'Q')
  108. {
  109. add(++x, y, csz, ++qsz);
  110. }
  111. else
  112. {
  113. add_(++x, y, t[x], ++csz);
  114. t[x] = y;
  115. }
  116. }
  117. sort(Node+, Node++qsz, cmp);
  118. // for(int i=1; i<=qsz; i++)
  119. // cout<< Node[i].l << " " << Node[i].r << endl;
  120. for(int i=; i<=qsz; i++)
  121. {
  122. for(; T < Node[i].t; T++)
  123. go(Cha[T+].pos, Cha[T+].New);
  124. for(; T > Node[i].t; T--)
  125. go(Cha[T].pos, Cha[T].Old);
  126.  
  127. for(; r < Node[i].r; r++)
  128. ad(c[r+]);
  129. for(; r > Node[i].r; r--)
  130. de(c[r]);
  131. for(; l < Node[i].r; l++)
  132. de(c[l]);
  133. for(; l > Node[i].l; l--)
  134. ad(c[l-]);
  135. // for(; T < Node[i].t; T++)
  136. // go(Cha[T+1].pos, Cha[T+1].New);
  137. // for(; T > Node[i].t; T--)
  138. // go(Cha[T].pos, Cha[T].Old);
  139.  
  140. Node[i].res = ans;
  141. }
  142. sort(Node+, Node+qsz+, cmp_id);
  143. for(int i=; i<=qsz; i++)
  144. printf("%d\n",Node[i].res);
  145.  
  146. return ;
  147. }

(待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345的更多相关文章

  1. P1903 [国家集训队]数颜色 / 维护队列(带修莫队)

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

  2. BZOJ 4129 Haruna’s Breakfast ( 树上带修莫队 )

    题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0, ...

  3. BZOJ 3052/Luogu P4074 [wc2013]糖果公园 (树上带修莫队)

    题面 中文题面,难得解释了 BZOJ传送门 Luogu传送门 分析 树上带修莫队板子题... 开始没给分块大小赋初值T了好一会... CODE #include <bits/stdc++.h&g ...

  4. LUOGU P4074 [WC2013]糖果公园 (树上带修莫队)

    传送门 解题思路 树上带修莫队,搞了两天..终于开O2+卡常大法贴边过了...bzoj上跑了183s..其实就是把树上莫队和带修莫队结合到一起,首先求出括号序,就是进一次出一次那种的,然后如果求两个点 ...

  5. P5168 xtq玩魔塔 [克鲁斯卡尔重构树+带修莫队]

    P5168 xtq玩魔塔 又是码农题- 利用克鲁斯卡尔重构树的性质 我们就可以得出 \(dep\) 值小的,肯定比 \(dep\) 大的值要优. 于是第二问就可以直接 LCA 求出来了- 至于第三问, ...

  6. CF940F Machine Learning(带修莫队)

    首先显然应该把数组离散化,然后发现是个带修莫队裸题,但是求mex比较讨厌,怎么办?其实可以这样求:记录每个数出现的次数,以及出现次数的出现次数.至于求mex,直接暴力扫最小的出现次数的出现次数为0的正 ...

  7. 【BZOJ-3052】糖果公园 树上带修莫队算法

    3052: [wc2013]糖果公园 Time Limit: 200 Sec  Memory Limit: 512 MBSubmit: 883  Solved: 419[Submit][Status] ...

  8. 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】

    题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...

  9. BZOJ2120 数颜色 莫队 带修莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2120.html 题目传送门 - BZOJ2120 题意 给定一个长度为 $n$ 的序列 $a$ ,有 ...

随机推荐

  1. 【Python学习笔记之三】lambda表达式用法小结

    除了def语句之外,Python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具很相似,所以称为lambda.就像def一样,这个表达式创建了一个之后能够调用的函数,但是它返回了 ...

  2. Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)

    1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...

  3. (转)CentOS7系统信息及运行情况查看

    原文链接:https://blog.csdn.net/qq_42196196/article/details/85063911 系统信息 CPU信息 内存信息 显卡信息 硬盘信息 网络信息 用户信息 ...

  4. Flash导出安卓端apk

    最近外甥女在学校做了一个演示视频,基于flash做的,希望小舅给她导出成可以运行在pc/android端的可执行程序.看了下过程还是蛮复杂的,还只能一天时间.重新照葫芦画瓢做一款是来不及了,由于以前基 ...

  5. github在版本库中删除某个文件的所有历史记录

    github的目的就是版本控制,记录每一个版本的变动.然而有的时候我们往往希望从版本库中彻底删除某个文件,不再显示在历史记录中.例如不小心上传了一堆错误的文件,或者不小心上传了帐号.密码,那么这个时候 ...

  6. 欢迎来怼--第三十六次Scrum会议

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/12/1 11:35~11:55,总计20min. 地点 ...

  7. OO第二阶段作业总结

    第五次作业:         设计策略: 本次作业设计的基本思路是按照指导书所给的推荐方法来完成的,即共用对象为队列盘,线程有电梯.调度器.以及扫描器,扫描器将控制台输入的有效指令加入到队列盘中,调度 ...

  8. Failed to execute request because the App-Domain could not be created. Error: 0x8007000e 存储空间不足,无法完成此操作。

    今天业务发现,服务器上的网站无法访问了. 页面报错: Server Application UnavailableThe web application you are attempting to a ...

  9. 【CSAPP笔记】14. 异常控制流和进程

    从给处理器加电,到断电为止,处理器做的工作其实就是不断地读取并执行一条条指令.这些指令的序列就叫做 CPU 的控制流(control flow).最简单的控制流是"平滑的",也就是 ...

  10. Beta 冲刺 (3/7)

    队名:日不落战队 安琪(队长) 过去两天完成了那些任务 上传个人信息. 接下来的任务 建立和上传收藏夹. 还剩下的任务 完善手写涂鸦. 社交模块. 遇到的困难 暂无. 有哪些收获和疑问 收获:okht ...