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.现在色板上只有 ...
随机推荐
- python基础学习笔记(十三)
re模块包含对 正则表达式.本章会对re模块主要特征和正则表达式进行介绍. 什么是正则表达式 正则表达式是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.换包话说,正则表达式 ...
- PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6806292.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 点评qq浏览器
1.内核. qq浏览器用的是是IE8的内核,而且是只有IE内核,所以,在速度上没办法跟那些webkit内核做对比了,不过也没有太慢,在沈航的网速下,打开网页的速度也还是勉强可以接受的. ...
- 五子棋游戏SRS
一.功能需求 1.绘制棋子 2.绘制界面 3.绘制棋盘 4.实现通过鼠标下棋并判断棋子是否落在棋盘上 6.判断胜负 二.用例图 玩家用例图: 1.落子:玩家鼠标点击最近的落子点落子.2.电脑先落子:选 ...
- Daily Scrum- 12/31
Meeting Minutes 更新了统计单词背诵精度的统计数字计算方法: 确定了词反转的效果的动画: Burndown Progress part 组员 今日工作 Time (h) 明日 ...
- id生成工具类
import java.util.Random; /** * 各种id生成策略 * <p>Title: IDUtils</p> * <p>Description: ...
- PAT 1009 说反话
https://pintia.cn/problem-sets/994805260223102976/problems/994805314941992960 给定一句英语,要求你编写程序,将句中所有单词 ...
- [转帖]Linux的进程线程及调度
Linux的进程线程及调度 本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10393707.html 本文为宋宝华<Linux的进程 ...
- laravel 在nginx服务器上除了首页其余都是404的问题
nginx对应站点的.conf配置文件添加如下代码 location / { try_files $uri $uri/ /index.php$is_args$query_string; #语法: tr ...
- hive-site.xml
https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin#AdminManualMetastoreAdmi ...