昊昊爱运动 II

昊昊喜欢运动

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

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

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

Input

输入两个数N, M (1≤N≤105, 1≤M≤100);

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

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

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

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

Output

对于所有的Q操作,每一行输出一个数 表示昊昊在第l天到第r天一共做了多少种活动

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

Source

题解:线段树+bitset

  1. //meek///#include<bits/stdc++.h>
  2. #include <cstdio>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include<iostream>
  7. #include<bitset>
  8. using namespace std ;
  9. #define mem(a) memset(a,0,sizeof(a))
  10. #define pb push_back
  11. #define fi first
  12. #define se second
  13. #define MP make_pair
  14. typedef long long ll;
  15.  
  16. const int maxn = ;
  17. const int inf = 0x3f3f3f3f;
  18. const int mod = ;
  19. bitset<> ret;
  20. int a[maxn];
  21. struct ss {
  22. int l,r;
  23. int tag;
  24. bitset<> b;
  25. }tr[maxn << ];
  26. void pushup(int k) {
  27. tr[k].b=tr[k<<].b | tr[k<<|].b;
  28. }
  29. void pushdown(int k) {
  30. if(!tr[k].tag||tr[k].l==tr[k].r) return ;
  31. tr[k<<].tag=tr[k].tag;
  32. tr[k<<|].tag=tr[k].tag;
  33. tr[k<<].b.reset();tr[k<<].b.set(tr[k].tag);
  34. tr[k<<|].b.reset();tr[k<<|].b.set(tr[k].tag);
  35. tr[k].tag=;
  36. }
  37. void build(int k,int s,int t) {
  38. tr[k].l=s;tr[k].r=t;
  39. tr[k].b.reset();
  40. tr[k].tag=;
  41. if(s==t) {
  42. tr[k].b.set(a[s]);
  43. return ;
  44. }
  45. int mid = (s+t) >> ;
  46. build(k<<,s,mid);build(k<<|,mid+,t);
  47. pushup(k);
  48. }
  49. void modify(int k,int s,int t,int c) {
  50. pushdown(k);
  51. if(s==tr[k].l&&t==tr[k].r) {
  52. tr[k].b.reset();
  53. tr[k].tag=c;
  54. tr[k].b.set(c);
  55. return ;
  56. }
  57. int mid = (tr[k].l+tr[k].r) >> ;
  58. if(t<=mid) modify(k<<,s,t,c);
  59. else if(s>mid) modify(k<<|,s,t,c);
  60. else {
  61. modify(k<<,s,mid,c);
  62. modify(k<<|,mid+,t,c);
  63. }
  64. pushup(k);
  65. }
  66. void ask(int k,int s,int t) {
  67. pushdown(k);
  68. if(s==tr[k].l&&t==tr[k].r) {
  69. ret|=tr[k].b;
  70. return ;
  71. }
  72. int mid = (tr[k].l+tr[k].r) >> ;
  73. if(t<=mid) ask(k<<,s,t);
  74. else if(s>mid) ask(k<<|,s,t);
  75. else {
  76. ask(k<<,s,mid);
  77. ask(k<<|,mid+,t);
  78. }
  79. }
  80. int main() {
  81. int n,m,l,r,x,q;char ch[];
  82. scanf("%d%d",&n,&m);
  83. for(int i=;i<=n;i++) scanf("%d",&a[i]);
  84. build(,,n);
  85. scanf("%d",&q);
  86. for(int i=;i<=q;i++) {
  87. scanf("%s",ch);
  88. if(ch[]=='Q') {
  89. scanf("%d%d",&l,&r);
  90. ret.reset();ask(,l,r);
  91. printf("%d\n",ret.count());
  92. }
  93. else {
  94. scanf("%d%d%d",&l,&r,&x);
  95. modify(,l,r,x);
  96. }
  97. }
  98. return ;
  99. }

代码

 

CDOJ 1259 昊昊爱运动 II 线段树+bitset的更多相关文章

  1. cdojQ - 昊昊爱运动 II

    地址:http://acm.uestc.edu.cn/#/contest/show/95 题目: Q - 昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) ...

  2. UESTC-1259 昊昊爱运动 II

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

  3. cdoj 1259 线段树+bitset 区间更新/查询

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

  4. UVA10869 - Brownie Points II(线段树)

    UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...

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

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

  6. SPOJ 1557. Can you answer these queries II 线段树

    Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...

  7. bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树

    2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 145 ...

  8. 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 线段树维护dp

    题目 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 链接 http://www.lydsy.com/JudgeOnline/proble ...

  9. hdu 5831 Rikka with Parenthesis II 线段树

    Rikka with Parenthesis II 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5831 Description As we kno ...

随机推荐

  1. dede 忘记密码在数据库中修改方法

    如何找回或修改dedecms后台管理员登录密码呢? 一个客户把密码忘了,找了很长一会没几个靠谱的回答,dede是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 方法是直接修改其m ...

  2. 企业该如何进行高效IT运维管理

    企业该如何进行高效IT运维管理 在企业内部也是一样,当大量的生产和经营数据集中在数据中心,一旦人们与数据中心因为IT故障而失去联系,停滞的也许不是个人应用受阻这样简单的后果.我们谁也不想看到自己企业的 ...

  3. UITableView 表视图编辑

    UITableViewController(表视图控制器)继承自UIViewController,自带一个tableView self.view不是UIView而是UITableView dataso ...

  4. 解决vs2013不能添加控制器的步骤

    点击:vs2013 更新,更新完以后,再重启下电脑就可以正常使用了

  5. [小技巧]初次接触 SSIS Package 的一点总结

    1 动态改变数据源 package从创建到调试到测试到生产环境,往往需要运行在不同的服务器上.我们可以定义Environment和Server两个变量,一个用于改变 Server,一个用于接收实际Se ...

  6. Datawarehouse

  7. Mysql去除重复

    常用的有两种方法,第一种就是select distinct name from table.但是有时候我们要返回多个字段时就用第二种方法select *, count(distinct name) f ...

  8. c++ 中static关键字

    static可以用于修饰普通的变量和函数,也可以用于修饰类的成员 普通应用 1.修饰普通变量 修饰全局变量:将变量的作用域限制在所属文件 修饰局部变量:将变量的生存周期延迟到程序结束 2.修饰普通函数 ...

  9. MATLAB中匿名函数与符号函数的转换

    符号函数举例: syms x y=x+1; y1=diff(y); %求导 匿名函数举例: z=@(x)(x(1)+2*x(2)); t=z([2 3]); %计算z在x=[2 3]处的值 z=@(x ...

  10. js selector libray

    http://sizzlejs.com/ http://selectivizr.com/