P1558 色板游戏 线段树+二进制状压
好,这个想法是我想拿去做HH的项链的。但是那个颜色有十万种。。。直接爆。
做这个倒是so easy
被两个地方坑了。1,a,b可能大小相反。
2,ask之前要down一波,我没down就挂了。。。。。。
注意要把+换成 |
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
int l,r,sum=,tag=;
}node[]; void build(int l,int r,int o)
{
node[o].l=l;
node[o].r=r;
node[o].sum=;
if(l==r) return;
int mid=(l+r)>>;
build(l,mid,o<<);
build(mid+,r,o<<|);
return;
}
void down(int o)
{
if(node[o].tag)
{
node[o<<].tag =node[o].tag;
node[o<<|].tag=node[o].tag;
node[o<<].sum =node[o].tag;
node[o<<|].sum=node[o].tag;
node[o].tag=;
}
return;
}
void add(int L,int R,int v,int o)
{
if(L<=node[o].l && node[o].r<=R)
{
node[o].sum=v;
node[o].tag=v;
return;
}
if(node[o].r<L || R<node[o].l) return;
int mid=(node[o].l+node[o].r)>>;
down(o);
if(L<=mid) add(L,R,v,o<<);
if(mid<R) add(L,R,v,o<<|);
node[o].sum=node[o<<].sum|node[o<<|].sum;
return;
}
int ask(int L,int R,int o)
{
if(L<=node[o].l && node[o].r<=R) return node[o].sum;
if(node[o].r<L || R<node[o].l) return ;
down(o);
return ask(L,R,o<<)|ask(L,R,o<<|);
}
int main()
{
int n,m,T,x,y,z;
char flag;
scanf ("%d%d%d",&n,&T,&m);
build(,n,);
while(m--)
{
cin>>flag;
if(flag=='C')
{
scanf("%d%d%d",&x,&y,&z);
if(x>y) swap(x,y);
add(x,y,(<<z),);
}
else
{
scanf("%d%d",&x,&y);
if(x>y) swap(x,y);
int k=ask(x,y,),ans=;
while(k)
{
ans+=(k%);
k=k>>;
}
printf("%d\n",ans);
}
}
return ;
}
AC代码在此
P1558 色板游戏 线段树+二进制状压的更多相关文章
- 洛谷P1558 色板游戏 [线段树]
题目传送门 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...
- P1558 色板游戏 (线段树)
题目链接 Solution 一个简单的 或 线段树.竟然坑了我一个小时... 因为颜色很小,所以把状态压起来. 然后每个节点上的数值代表当前颜色状态. 然后节点合并很简单,直接或起来. 需要注意一下的 ...
- P1558 色板游戏 线段树(区间修改,区间查询)
题意: 给n,m,k,n长度,k个操作,m种颜色 操作C:输入A,B,C,区间[A,B]变成C颜色,可能A>B,所以要确保A<B 操作P:输入A,B,区间[A,B]的颜色种类 思路: 因为 ...
- P1558 色板游戏 状压线段树
P1558 色板游戏 状压线段树 题面 洛谷P1558 每次不同颜色覆盖一段区间,每次询问一段区间有多少种颜色 因为颜色数\(T\)很小,使用二进制表示状态当前区间有那些颜色,二进制第\(i\)位表示 ...
- P1558 色板游戏
P1558 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...
- 线段树(压位)luogu P1558色板游戏
题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L. 现在色板上只 ...
- Luogu P1558 色板游戏
(此题与POJ2777重题) 为了加深对线段树的记忆,然后开始搞这道题. TM的WA了一下午就是发现x可能大于y(然而题目里说的还很清楚,我TM没看见) 这道题只需要在线段树的板子上改一些地方就可以了 ...
- 【luogu P1558 色板游戏】 题解
题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...
- 洛谷P1558 色板游戏
题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L.现在色板上只有 ...
随机推荐
- Nagios数据存储插件NDOUtils部署和测试
1. 概述 NDOUTILS,Nagios Data Output Utils,Nagios数据输出工具,允许用户从Nagios导出状态和事件信息到数据库中,便于以后的检索和加工 它包括几个部分: N ...
- High-level structure of a simple compiler高級結構的簡單編譯器
1.lexical analysis,which analyzes the character string presented to it and divides it up into tokens ...
- SCP和Rsync远程拷贝的几个技巧
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...
- Linux磁盘空间被占用问题 (分区目录占用空间比实际空间要大: 资源文件删除后, 空间没有真正释放)
问题说明:IDC里的一台服务器的/分区使用率爆满了!已达到100%!经查看发现有个文件过大(80G),于是在跟有关同事确认后rm -f果断删除该文件.但是发现删除该文件后,/分区的磁盘空间压根没有释放 ...
- mysql主从同步(5)-同步延迟状态考量(seconds_behind_master和pt-heartbea)
一般情况下,我们是通过"show slave status \G;"提供的Seconds_Behind_Master值来衡量mysql主从同步的延迟情况.具体说明见:mysql主从 ...
- ResultSet集合查询字段名称(转载)
转自:https://blog.csdn.net/song_litao/article/details/84751351 public List<String> getColumnName ...
- 个人阅读作业WEEK7 (软件工程的瀑布, 大泥球, 教堂,集市,和银弹)
一 . 关于银弹 (Silver Bullet) 银弹,被引申为解决问题的有效办法.IBM大型机之父福瑞德·布鲁克斯在1986年的论文<没有银弹>中表达了他的观点:软件工程中不存在银弹—— ...
- 毕业设计 之 五 PHP语法学习笔记
毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...
- 使用thinkphp框架实现Excel导入数据库
之前讲过php实现Excel导出数据库的随笔,链接:https://www.cnblogs.com/nuanai/p/6727711.html 之前的项目用到较多的就是Excel导出,现在用到了Exc ...
- Aop事务小结(事务管理器和自身构建)
声明市事务是利用AOP来实现的. 1.采用事务管理器AOP: <!--3.配置事务切面:控制住连接池 --> <bean id="transactionManager&qu ...