POJ 2777 Count Color【线段树】
题目大意:要求完成以下两个操作: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;
}
最新文章
- epoll &; socket 连接数突破
- c#中抽象类(abstract)和接口(interface)的相同点与区别
- 分布式存储数据库的Key的随机分布(RP)和顺序分布(OPP)
- Hibernate 根据实体名称得到DB表名以及表对应的Sequence name
- 说说C#和.NET的关系
- My97DatePicker的calendar.js的反混淆
- ThinkPHP CURD方法盘点:order方法
- 模拟(堆):USACO Jan11 瓶颈
- IIS7中配置脚本错误解决方案
- 为Linux用ISO制作U盘启动及基本原理
- 【NOIP2012】开车旅行(倍增)
- FIVE1
- vuex2.0 基本使用(1) --- state
- java bio总结
- 获取对象的key值,并保存在数组中
- Python 使用 xlwings 往 excel中写入一列数据的两种方法
- 什么是对象:EVERYTHING IS OBJECT(万物皆对象)
- css初始化minireset.css
- flask文件上传
- POJ 2393
热门文章
- 关于Control.Dispatcher.BeginInvoke卡界面
- jsapi4加载的首个图层的范围被默认作为地图范围,且不能修改的解决
- Java虚拟机性能调优相关
- Hadoop分布式集群安装
- 云梯互联:所有主机已全面支持免费SSL!附小白配置教程。
- 【Android】ListView中EditText焦点问题
- docker 新手入门 (阿里镜像仓库的使用)
- There is no Action mapped for namespace [/] and action name [updateUser] associated with context path [].
- treeTable的使用(ajax异步获取数据,动态渲染treeTable)
- 异常:java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext