题目大意:要求完成以下两个操作:1.将一个区间刷上一种颜色2.询问一段区间上有多少种颜色

思路:这两个操作线段树都可以很迅速的完成,具体做法是:线段树上每个节点存这个线段上的颜色数量,由于颜色数很少,因此可以用二进制存颜色,如果二进制的第N位是1,则该区间存在颜色N,因此一个节点等于其两个子节点颜色的或。最后一个问题就是修改操作是对区间修改,因此需要用lazy_tag的思想(虽然这里不完全是),不然一个一个插节点会TLE

#include<cstdio>

#include<string.h>

#include<iostream>

using namespace std;

int tree[500000]={0};

bool lazy[500000]={0};

void swap(int &x,int &y){int temp=x;x=y;y=temp;}

int search(int node,int l,int r,int lq,int rq)

{

int mid=(l+r)>>1,temp=0;

if (lazy[node]==true){return tree[node];}

if (lq<=l && r<=rq){return tree[node];}

else

{

if (lazy[node]==1){lazy[node<<1]=1;tree[node<<1]=tree[node];

tree[(node<<1)+1]=tree[node];lazy[(node<<1)+1]=1;}

if (lq<=mid)temp=search(node<<1,l,mid,lq,rq);

if (mid<rq)temp=temp | search((node<<1)+1,mid+1,r,lq,rq);

}

return temp;

}

void insert(int node,int l,int r,int lq,int rq,int color)

{

int mid=(l+r)>>1;

if (lq<=l && r<=rq){tree[node]=1<<(color-1);lazy[node]=true;return;}

else

{

if (lazy[node]==1)

{

lazy[node]=0;lazy[node<<1]=1;

tree[node<<1]=tree[node];tree[(node<<1)+1]=tree[node];

lazy[(node<<1)+1]=1;

}

if (lq<=mid)insert(node<<1,l,mid,lq,rq,color);

if (rq>mid)insert((node<<1)+1,mid+1,r,lq,rq,color);

}

tree[node]=tree[node<<1] | tree[(node<<1)+1];

}

int f(int u)

{

int t=0;while(u!=0){if ((u & 1)==1)t++;u>>=1;}

return t;

}

int main()

{

int t,o,l,left,right,color;

char ch[2];

scanf("%d%d%d",&l,&t,&o);

for(int i=1;i<=4*l;i++)tree[i]=1;

for(int v=1;v<=o;v++)

{

scanf("%s",ch);

if (ch[0]=='C')

{

scanf("%d%d%d",&left,&right,&color);

if (right<left)swap(right,left);

insert(1,1,l,left,right,color);

}

else

{

scanf("%d%d",&left,&right);

if (right<left)swap(right,left);

int u=search(1,1,l,left,right);

printf("%d\n",f(u));

}

}

return 0;

}

最新文章

  1. epoll &amp; socket 连接数突破
  2. c#中抽象类(abstract)和接口(interface)的相同点与区别
  3. 分布式存储数据库的Key的随机分布(RP)和顺序分布(OPP)
  4. Hibernate 根据实体名称得到DB表名以及表对应的Sequence name
  5. 说说C#和.NET的关系
  6. My97DatePicker的calendar.js的反混淆
  7. ThinkPHP CURD方法盘点:order方法
  8. 模拟(堆):USACO Jan11 瓶颈
  9. IIS7中配置脚本错误解决方案
  10. 为Linux用ISO制作U盘启动及基本原理
  11. 【NOIP2012】开车旅行(倍增)
  12. FIVE1
  13. vuex2.0 基本使用(1) --- state
  14. java bio总结
  15. 获取对象的key值,并保存在数组中
  16. Python 使用 xlwings 往 excel中写入一列数据的两种方法
  17. 什么是对象:EVERYTHING IS OBJECT(万物皆对象)
  18. css初始化minireset.css
  19. flask文件上传
  20. POJ 2393

热门文章

  1. 关于Control.Dispatcher.BeginInvoke卡界面
  2. jsapi4加载的首个图层的范围被默认作为地图范围,且不能修改的解决
  3. Java虚拟机性能调优相关
  4. Hadoop分布式集群安装
  5. 云梯互联:所有主机已全面支持免费SSL!附小白配置教程。
  6. 【Android】ListView中EditText焦点问题
  7. docker 新手入门 (阿里镜像仓库的使用)
  8. There is no Action mapped for namespace [/] and action name [updateUser] associated with context path [].
  9. treeTable的使用(ajax异步获取数据,动态渲染treeTable)
  10. 异常:java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext