题目:http://poj.org/problem?id=2777

状压每个颜色的选择情况,取答案时 | 一番;

注意题目中的区间端点可能大小相反,在读入时换一下位置;

注意pushdown()中要lazy标签不为0才进行更新。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int const N=;
int t[N],lazy[N],len,tt,o;
char dc;
void pushdown(int x)
{
if(lazy[x])//!
{
lazy[x*]=lazy[x];
lazy[x*+]=lazy[x];
t[x*]=lazy[x];
t[x*+]=lazy[x];
lazy[x]=;
}
}
void pushup(int x)
{
t[x]=(t[x*]|t[x*+]);
}
void build(int l,int r,int x)
{
t[x]=;
if(l==r)return;
int mid=(l+r)/;
build(l,mid,x*);
build(mid+,r,x*+);
}
void update(int l,int r,int ll,int rr,int s,int x)
{
if(l>=ll&&r<=rr)
{
t[x]=s;
lazy[x]=s;
return;
}
pushdown(x);
int mid=(l+r)/;
if(mid>=ll)update(l,mid,ll,rr,s,x*);
if(mid<rr)update(mid+,r,ll,rr,s,x*+);
pushup(x);
}
int query(int l,int r,int ll,int rr,int x)
{
int ans=;
if(l>=ll&&r<=rr)
return t[x];
pushdown(x);
int mid=(l+r)/;
if(mid>=ll)ans|=query(l,mid,ll,rr,x*);
if(mid<rr)ans|=query(mid+,r,ll,rr,x*+);
return ans;
}
int main()
{
while(scanf("%d%d%d",&len,&tt,&o)==)
{
build(,len,);
while(o--)
{
cin>>dc;
// printf("(%c)\n",dc);
if(dc=='C')
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x>y)swap(x,y);
z=(<<(z-));
update(,len,x,y,z,);
}
if(dc=='P')
{
int x,y;
scanf("%d%d",&x,&y);
if(x>y)swap(x,y);
int k=query(,len,x,y,);
int ans=;
for(int i=;i<=tt;i++)
if(k&(<<(i-)))ans++;
printf("%d\n",ans);
}
}
}
return ;
}

poj2777Count Color——线段树+状压的更多相关文章

  1. POJ:2777-Count Color(线段树+状压)

    Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program d ...

  2. hdu 5023 线段树+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...

  3. POJ 3468 线段树+状压

    题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #in ...

  4. Bzoj 3813 奇数国 题解 数论+线段树+状压

    3813: 奇数国 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 748  Solved: 425[Submit][Status][Discuss] ...

  5. POJ-2777Count Color 线段树+位移

    这道题对于我这样的初学者还是有点难度的不过2遍A了还是很开心,下面说说想法-- Count Color Time Limit: 1000MS Memory Limit: 65536K Total Su ...

  6. poj2777--Count Color(线段树,二进制转化)

    Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34950   Accepted: 10542 Des ...

  7. HDU_3071 Gcd & Lcm game 【素数分解 + 线段树 + 状压】

    一.题目  Gcd & Lcm game 二.分析 非常好的一题. 首先考虑比较暴力的做法,肯定要按区间进行处理,对于$lcm$和$gcd$可以用标准的公式进行求,但是求$lcm$的时候是肯定 ...

  8. C++-POJ2777-Count Color[线段树][lazy标记][区间修改]

     分析:https://www.bilibili.com/read/cv4777102 #include <cstdio> #include <algorithm> using ...

  9. 【bzoj4006】[JLOI2015]管道连接 斯坦纳树+状压dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...

随机推荐

  1. 使用css counter来美化代码片段的样式

    博客园默认的代码片段样式不太美观,特别是复制代码时会把前面的行号也复制下来,操作起来比较麻烦.最近看到一种使用CSS计数器来美化代码片段的方法,于是研究了一下计数器的使用,在此做个笔记. 这是官网的例 ...

  2. Linux U盘只读解决方法

    Linux Fat的U盘只读,这个问题经常出现,原因大家都说了是U盘的错误,出现这种情况后,一般的解决方案是 mount | grep <U盘的标签> # 找到你的U盘的对应的设备名称,如 ...

  3. Perl语言学习笔记 15 智能匹配与give-when结构

    1.智能匹配操作符 替代绑定操作符: 在哈希中查找某一个键: 比較两个数组是否全然同样: 查找列表中是否存在某个元素: 智能匹配操作符与顺序无关.~~ 左右元素能够互换 2.智能操作符优先级 3.gi ...

  4. 【SQLServer2008】之改变主键当为null时也不会报错,可以入数据库。

    在SqlServer红框中设置主键,右键会有添加主键选项,并且设置不能为null. 当我们插入主键数据如果为null时,会插不进去,这时候我们需要修改一下,如下图: “标识规范”中选择“是”,就可以了 ...

  5. Unity3D研究院编辑器之脚本设置ToolBar及脚本设置顶视图

    Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...

  6. Jquery和JS的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 【BZOJ4605】崂山白花蛇草水 权值线段树+kd-tree

    [BZOJ4605]崂山白花蛇草水 Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了 ...

  8. 【C#图解】PictureBox.SizeMode 属性(转)

    PictureBoxSizeMode.Normal: 默认情况下,在 Normal 模式中,Image 置于 PictureBox 的左上角,凡是因过大而不适合 PictureBox 的任何图像部分都 ...

  9. N皇后问题算法

    N皇后问题的两种主要算法是试探回溯法和位运算法.前一种是经典算法,后一种是目前公认的最高效算法,后者比前者效率提高了至少一个数量级.很多问题可以借鉴位运算的思想. 以下是转载的我认为写的比较好的一篇N ...

  10. 【题解】P1407国家集训队稳定婚姻

    [题解][P1407 国家集训队]稳定婚姻 很好的一道建模+图论题. 婚姻关系?很像二分图匹配呀,不过不管怎么办先建模再说.婚姻关系显然用图方面的知识解决.建图! 它给定的是字符串,所以我们使用\(a ...