地址:http://acm.uestc.edu.cn/#/contest/show/95

题目:

Q - 昊昊爱运动 II

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

昊昊喜欢运动

他NN 天内会参加MM 种运动(每种运动用一个[1,m][1,m] 的整数表示)

现在有QQ 个操作,操作描述如下

  • 昊昊把第ll 天到第rr 天的运动全部换成了xx (x∈[1,m]x∈[1,m] )
  • 问昊昊第ll 天到第rr 天参加了多少种不同的运动

Input

输入两个数NN , MM (1≤N≤1051≤N≤105 , 1≤M≤1001≤M≤100 );

输入NN 个数aiai (ai∈[1,m]ai∈[1,m] )表示在第i天昊昊做了第aiai 类型的运动;

输入一个数QQ (1≤Q≤1051≤Q≤105 );

输入QQ 行 每行描述以下两种操作

  • 形如M l r x,表示昊昊把第ll 天到第rr 天的运动全部换成了xx (x∈[1,m]x∈[1,m] )
  • 形如Q l r,表示昊昊想知道他第ll 天到第rr 天参加了多少种不同的运动

Output

l

Sample input and output

Sample Input Sample Output
  1. 5 3
  2. 1 2 3 2 3
  3. 4
  4. Q 1 4
  5. Q 2 4
  6. M 5 5 2
  7. Q 1 5
  1. 3
  2. 2
  3. 3

思路:

区间覆盖,区间查询

依旧线段树搞起,不过有pushup和pushdown操作,这要注意下

具体的就不说了,和前面的题目没啥区别

对了要用bitset记录,,差点忘了、

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <queue>
  7. #include <stack>
  8. #include <map>
  9. #include <vector>
  10. #include <cstdlib>
  11. #include <string>
  12. #include <bitset>
  13.  
  14. #define PI acos((double)-1)
  15. #define E exp(double(1))
  16. #define K 100000
  17. using namespace std;
  18. int n,m;
  19. int a[K+];
  20. struct node
  21. {
  22. bitset<>s;
  23. int change,l,r;
  24. };
  25. struct node tree[*K+];
  26.  
  27. void pushdown(int id)
  28. {
  29. if(!tree[id].change)
  30. return ;
  31. tree[id*+].s=tree[id*].s=tree[id].s;
  32. tree[id*+].change=tree[id*].change=;
  33. tree[id].change=;
  34. }
  35. void build(int id,int l,int r)
  36. {
  37. tree[id].l=l;tree[id].r=r;tree[id].change=;
  38. if(l==r)
  39. tree[id].s[a[l]]=;
  40. else
  41. {
  42. int mid=(tree[id].l+tree[id].r)>>;
  43. if(r <= mid) build(id*,l,r);
  44. else if(l > mid) build(id*+,l,r);
  45. else
  46. {
  47. build(id<<,l,mid);
  48. build(id*+,mid+,r);
  49. }
  50. tree[id].s=tree[id*].s|tree[id*+].s;
  51. }
  52. }
  53. void update(int id,int l,int r,int v)
  54. {
  55. if(tree[id].l==l && tree[id].r==r)
  56. {
  57. tree[id].change=;
  58. tree[id].s.reset();
  59. tree[id].s[v]=;
  60. }
  61. else
  62. {
  63. pushdown(id);
  64. int mid=(tree[id].l+tree[id].r)>>;
  65. if(r<=mid) update(id<<,l,r,v);
  66. else if(l>mid) update(id*+,l,r,v);
  67. else
  68. {
  69. update(id<<,l,mid,v);
  70. update(id*+,mid+,r,v);
  71. }
  72. tree[id].s=tree[id*].s|tree[id*+].s;
  73. }
  74. }
  75.  
  76. bitset<> query(int id,int l,int r)
  77. {
  78. if(tree[id].l == l && tree[id].r==r )
  79. return tree[id].s;
  80. else
  81. {
  82. pushdown(id);
  83. int mid=(tree[id].l+tree[id].r)>>;
  84. bitset<>ret;
  85. if(r<=mid) ret=ret|query(id*,l,r);
  86. else if(l>mid) ret=ret|query(id*+,l,r);
  87. else
  88. {
  89. ret=ret|query(id*,l,mid);
  90. ret=ret|query(id*+,mid+,r);
  91. }
  92. return ret;
  93. }
  94. }
  95. int main(void)
  96. {
  97. cin>>n>>m;
  98. for(int i=;i<=n;i++)
  99. scanf("%d",&a[i]);
  100. build(,,n);
  101. int q;
  102. cin>>q;
  103. while(q--)
  104. {
  105. char c;
  106. c=getchar();
  107. while(c==' ' || c=='\n')
  108. c=getchar();
  109. if(c=='M')
  110. {
  111. int l,r,v;
  112. scanf("%d%d%d",&l,&r,&v);
  113. update(,l,r,v);
  114. }
  115. else
  116. {
  117. int l,r,num=;
  118. scanf("%d%d",&l,&r);
  119. bitset<> temp=query(,l,r);
  120. for(int i=;i<=m;i++)
  121. if(temp.test(i))
  122. num++;
  123. printf("%d\n",num);
  124. }
  125. }
  126. return ;
  127. }

cdojQ - 昊昊爱运动 II的更多相关文章

  1. CDOJ 1259 昊昊爱运动 II 线段树+bitset

    昊昊爱运动 II 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r ...

  2. UESTC-1259 昊昊爱运动 II

    昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)     昊昊喜 ...

  3. CDOJ 1259 昊昊爱运动 II bitset+线段树

    题目链接 昊昊喜欢运动 他N天内会参加M种运动(每种运动用一个[1,m]的整数表示) 现在有Q个操作,操作描述如下 昊昊把第l天到第r天的运动全部换成了x(x∈[1,m]) 问昊昊第l天到第r天参加了 ...

  4. UESTC 1256 昊昊爱运动 Map

    昊昊爱运动 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他N天 ...

  5. cdoj 1256 昊昊爱运动 预处理/前缀和

    昊昊爱运动 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1256 Descr ...

  6. cdoj 1256 昊昊爱运动 预处理

    昊昊爱运动 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 昊昊喜欢运动 他NN ...

  7. bzoj 3704 昊昊的机油之GRST 贪心dp,思维

    昊昊的机油之GRST Time Limit: 10 Sec  Memory Limit: 1024 MBSubmit: 80  Solved: 33[Submit][Status][Discuss] ...

  8. bzoj 3704 昊昊的机油之GRST - 贪心

    题目传送门 传送门 题目大意 给定一个数组$a$和数组$b$,每次操作可以选择$a$的一个子区间将其中的数在模4意义下加1,问把$a$变成$b$的最少操作次数. 首先求$b - a$,再差分,令这个数 ...

  9. bzoj 3704: 昊昊的机油之GRST【贪心+脑洞】

    脑洞题大概 首先处理出每个位置需要操作的次数c,假设第一次达到目标就不能再走,这样的操作次数是c差分后值的正数和,就想成分治每一段然后同减最小值然后从0处断开 然后考虑能一圈一圈走的情况,连续一段多走 ...

随机推荐

  1. ActiveMQ 无法启动 提示端口被占用 解决方案

    http://bob-zhangyong.blog.163.com/blog/static/17610982012729113326153/ ————————————————————————————— ...

  2. css3兼容代码

    1. 渐变:.gradient{ width:300px; height:150px; filter:alpha(opacity=100 finishopacity=50 style=1 startx ...

  3. Jmeter接口测试系列之参数化方法

    至于参数化的用途,我这里就不多说了,本文主要介绍最全.最强大的参数化方法,对参数化有一个彻底的认识,这里提供了多种参数化方法 1.jmeter参数化之用户变量   在测试计划里面添加一个用户自定义的变 ...

  4. 要创建一个EJB,必须要至少编写哪些Java类和接口?

    要创建一个EJB,必须要至少编写哪些Java类和接口? A. 定义远程(或业务)接口 B. 定义本地接口 C. 定义Bean接口 D. 编写Bean的实现 解答:ABC

  5. debug命令

    debug -r 查看寄存器-a 输入指令-t 执形命令 通用寄存器:AX=AH+ALBX=BH+BLCX=CH+CLDX=DH+DL 2Byte 16bitFFFF0-(2的16次方减1) debu ...

  6. jquery代码规范让代码越来越好看

    最近学了jQuery,感觉这个jQuery是真的挺不错的,果然像他说的那样,少些多做!刚一入手感觉真是不错.但是写多了,就会发现这个代码一行居然能写那么长.而且可读性还不好.  有幸自己买了一本锋利的 ...

  7. Linux下android开发环境配置

    1.安装jdk 1.到sun官网下载jdk(附jdk6下载地址),根据自己的ubuntu版本选择合适的jdk版本.如你用的是ubuntu 32位系统则选择下载jdk-6u41-linux-i586.b ...

  8. Request的属性和防止图片被盗链

    Request.AppRelativeCurrentExecutionFilePath,获取当前执行请求相对于应用根目录的虚拟路径,以~开头,比如"~/default.ashx" ...

  9. Android 界面滑动卡顿分析与解决方案(入门)

    Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...

  10. JavaScript-烂笔头

    JavaScript 对大小写敏感 注释单行用:// 注释多汗用:/* */ 声明变量:var 变量名 (未使用值来声明的变量,值为undefined) JavaScript 变量均为对象 可以使用关 ...