题目: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. rtems 4.11 时钟驱动(arm, beagle)

    根据bsp_howto手册,时钟驱动的框架主要在 c/src/lib/libbsp/shared/Clockdrv_shell.h 文件中实现 时钟初始化 时钟驱动初始化函数为 Clock_initi ...

  2. 网卡配置bond

    在实际的生产环境中,服务器都需要配置bond环境的,以提高安全性及均衡能力.我公司网卡配置的是mode=1 类型,mode=1 是主备模式,当其中一块网卡不能工作时,另一块网卡立即代替.以下是mode ...

  3. JS实现图片无缝滚动特效;附addEventListener()方法、offsetLeft和offsetWidth属性。

    一:html部分 <body> <input id="btn1" type="button" value="向左"> ...

  4. 【BZOJ2510】弱题 期望DP+循环矩阵乘法

    [BZOJ2510]弱题 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球 ...

  5. 一种微信直播H5直播与存储回放的HLS摄像机方案

    接上篇 在上一篇博客<一种流量成本节省60%以上的手机直播微信直播H5直播幼儿园直播方案>中,我们一共介绍了两种省钱的HLS直播途径: 方案一:编码器或者内网推流直接对接云存储的场景 如果 ...

  6. EasyPlayerPro(Windows)流媒体播放器开发之框架讲解

    EasyPlayerPro for Windows是基于ffmpeg进行开发的全功能播放器,开发过程中参考了很多开源的播放器,诸如vlc和ffplay等,其中最强大的莫过于vlc,但是鉴于vlc框架过 ...

  7. Git 重写历史 filter-branch

    source:https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2 重写 ...

  8. 我的Android进阶之旅------>Ubuntu下不能识别Android设备的解决方法

    Bus 001 Device 006: ID 1b20:0c81 MStar Semiconductor, Inc.      今天不知道Ubuntu发了什么疯,昨天还用的好好的,今天就突然不能识别我 ...

  9. hdu 4927 java程序

    /*对于本题题意非常easy 关键在于求杨辉三角时的二项式是没实用到优化,导致超时. 对于第n行的二项式的第i个可有第i-1个乘于一个数处于一个数得到,要用到大数.java比較方便. 假如n=6,i= ...

  10. 关于jquery-weui.js中时间控件datetimepicker的使用

    今天第一次接触jquery-weui,不太了解用法,然而官方文档写的也很简略,只好打开源代码进行研究,我想要的是设置开始日期大于当前日期,然后在源码中发现有min这个默认为undefined的属性,于 ...