题目链接:https://www.nowcoder.com/acm/contest/105/H

题意:两个操作,一个在[l,r]区间放颜色为c的球,一个统计在[l,r]里有多少不同颜色的球。

题解:哎,线段树嘛。板子嘛、把求和操作改一改嘛。当时没用lazy操作T了嘛。谢谢大佬的板子。小萌新知道lazy是个啥玩意儿了。emmm..最后统计一下1的个数就是答案啦。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. #define ll long long
  6. struct data{
  7. int l,r;
  8. ll add;
  9. ll sum;
  10. }data[];
  11.  
  12. void build(int l,int r,int k){
  13. data[k].l=l;
  14. data[k].r=r;
  15. data[k].add=;
  16. data[k].sum=;
  17. if(l==r){
  18. return ;
  19. }
  20. int mid=(data[k].l+data[k].r) >> ;
  21. build(l,mid,k*);
  22. build(mid+,r,k*+);
  23. }
  24.  
  25. void pushdown(int k){
  26. if(data[k].add==) return ;
  27. data[k*].sum |= data[k].add;
  28. data[k*+].sum |= data[k].add;
  29. data[k*].add |= data[k].add;
  30. data[k*+].add |=data[k].add;
  31. data[k].add=;
  32. }
  33.  
  34. void update(int l,int r,int x,int k){
  35. if(data[k].l==l&&data[k].r==r){
  36. data[k].sum|=(ll)(1LL<<x);
  37. data[k].add|=(ll)(1LL<<x);
  38. return ;
  39. }
  40. pushdown(k);
  41. int mid=(data[k].l + data[k].r)/;
  42. if(r <= mid){
  43. update(l,r,x,k*);
  44. }else if(l > mid){
  45. update(l,r,x,k*+);
  46. }else{
  47. update(l,mid,x,k*);
  48. update(mid+,r,x,k*+);
  49. }
  50. data[k].sum=data[k*].sum | data[k*+].sum;
  51. }
  52.  
  53. ll query(int l,int r,int k){
  54. if(data[k].l==l&&data[k].r==r){
  55. return data[k].sum;
  56. }
  57. pushdown(k);
  58. int mid=(data[k].l + data[k].r) / ;
  59. if(r <= mid){
  60. return query(l,r,k*);
  61. }else if(l > mid){
  62. return query(l,r,k*+);
  63. }else{
  64. return query(l,mid,k*) | query(mid+,r,k*+);
  65. }
  66. }
  67.  
  68. int main(){
  69. int n,m;
  70. scanf("%d %d",&n,&m);
  71. build(,n,);
  72. while(m--){
  73. int flag;
  74. scanf("%d",&flag);
  75. if(flag==){
  76. int x,y,k;
  77. scanf("%d%d%d",&x,&y,&k);
  78. update(x,y,k,);
  79. }else{
  80. int x,y;
  81. scanf("%d%d",&x,&y);
  82. int ans = query(x,y,);
  83. int cnt = ;
  84. while(ans){
  85. if(ans&)
  86. cnt++;
  87. ans = ans >> ;
  88. }
  89. cout<<cnt<<endl;
  90. }
  91. }
  92. return ;
  93. }

2018湘潭大学程序设计竞赛【H】的更多相关文章

  1. 2018年湘潭大学程序设计竞赛 H统计颜色

    链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  2. 2018湘潭大学程序设计竞赛【B】

    题目链接: https://www.nowcoder.com/acm/contest/105/B 题意: 给你一个字母矩阵,和测试组数,让你统计字符串的字符累计出现的次数,然后让你找出需要找的字符,这 ...

  3. 2018湘潭大学程序设计竞赛【E】

    题目链接:https://www.nowcoder.com/acm/contest/105/E 题意:给你美食种类和查询次数,告诉你美味度和价格,给你固定钱数,问你最多能吃到多少美味度的食物.(X真是 ...

  4. 2018湘潭大学程序设计竞赛【A】

    题目链接:https://www.nowcoder.com/acm/contest/105/A 题意:给你起始和结束的天时分,让你算总秒数. 题解:输入格式.注意long long.签到题. #inc ...

  5. 2018湘潭大学程序设计竞赛【D】

    题目链接:https://www.nowcoder.com/acm/contest/105/D 题意:就是数的fib表示方法.按权展开,又按二进制算出结果输出. 题解:贪心和数论吧.找到跟数最接近的f ...

  6. 2018湘潭大学程序设计竞赛【C】

    题目链接:https://www.nowcoder.com/acm/contest/105/C 题意:给你几个矩形的左上角和右下角的坐标,让你算有几个矩形相交. 题解: 每次都暴力标记一下炸弹区域里的 ...

  7. 2018年湘潭大学程序设计竞赛G又见斐波那契

    链接:https://www.nowcoder.com/acm/contest/105/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. 2018年湘潭大学程序设计竞赛 F - maze

    把点抽出来 跑个最短路就好啦. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> # ...

  9. 2018年湘潭大学程序设计竞赛 G- 又见斐波那契

    推一推矩阵直接快速幂. #include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #defi ...

随机推荐

  1. share memory

    header for public argument:shmdata.h #define TEXT_SZ 2048 struct shared_use_st { int written; char t ...

  2. java lambda filter写法

    datas.stream().filter(m->!m.getSerialId().equals(setting.getSerialId())).collect(Collectors.toLis ...

  3. continuation line under-indented for visual indent

    continuation line under-indented for visual indent 问题:使用flake8检验代码规范时报错:continuation line under-inde ...

  4. nginx填坑补充(nginx根据上下文跳转ip或者域名)

    今天有一个需求,要根据上下文调到不同的ip或域名地址,使用上下文做域名跳转的时候,proxy_pass域名后面一定要带‘/’否则会把nginx的上下文自动带入,这样就行. location ^~ /d ...

  5. Openstack组件部署 — Nova overview

    目录 目录 前文列表 前言 Compute service overview Nova 的组件 nova-api service nova-api-metadata service nova-comp ...

  6. 调试口:JTAG与SW-Debug Port

  7. Redis和SpringBoot整合RedisUtils类

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  8. <Git>git学习

    1.安装 分布式版本控制:工作电脑保存完整的代码,中央服务器挂了也可以使用 集中式版本控制:中央服务器挂了就凉凉 sudo apt-get install git git安装 检测安装成功 git 2 ...

  9. 51-Ubuntu-打包压缩-1-打包压缩简介

    打包压缩是日常工作中备份文件的一种方式 在不同操作系统中,常用的打包压缩方式是不同的 Windows 常用 rar Mac 常用 zip Linux 常用 tar.gz

  10. 1、如何在列表,字典,集合种根据条件筛选数据?2、如何为元组中的每个元素命名,提高程序的可读性3、如何统计出序列中元素出现的频度4、如何根据字典中value的大小,对字典的key进行排序

    一.数据筛选: 处理方式: 1.filter函数在py3,返回的是个生成式. from random import randint data = [randint(-100,100) for i in ...