洛谷 P1558 色板游戏
题解里面好像都是压位什么的,
身为蒟蒻的我真的不会,
所以就来谈谈我的30颗线段树蠢方法吧!
这题初看没有头绪。
然后发现颜色范围好像只有30;
所以,我就想到一种\(sao\)操作,搞30颗线段树。
每颗线段树代表一种颜色。
那么对于题中的两种操作:
1.修改。我们for循环扫一遍所有颜色,把其他颜色的线段树l->r修改成0,要修
改的颜色所对应的线段树改成1。
2.询问。也是for循环,如果\(l->r\)这个区间的第k种颜色所对应的线段树有值,则\(ans++\)。
时间复杂度也很低,大概是\((MLlog(L)*T)\),真正的\(O(\)卡时\()\).
献上代码:
#include <bits/stdc++.h>
#define ll(x) ((x)<<1)
#define rr(x) ((x)<<1|1)
using namespace std;
const int T=31,N=100010;
int n,t,m;
int laz[T][N<<2],sum[T][N<<2];
void pushup(int i,int x)
{
sum[i][x]=sum[i][ll(x)]+sum[i][rr(x)];
}
void build(int i,int x,int l,int r)
{
if (l==r) {
sum[i][x]=1;
return;
}
int mid=l+r>>1;
build(i,ll(x),l,mid);
build(i,rr(x),mid+1,r);
pushup(i,x);
}
void pushdown(int i,int x)
{
if (laz[i][x]==-1) {
sum[i][ll(x)]=sum[i][rr(x)]=0;
laz[i][ll(x)]=laz[i][rr(x)]=-1;
}
else {
sum[i][ll(x)]=sum[i][rr(x)]=laz[i][x];
laz[i][ll(x)]=laz[i][rr(x)]=laz[i][x];
}
laz[i][x]=0;
}
void change(int i,int x,int l,int r,int ls,int rs,int v)
{
if (l>rs||r<ls) return;
if (l>=ls&&r<=rs) {
sum[i][x]=v;
if (!v) laz[i][x]=-1;
else laz[i][x]=v;
return;
}
if (laz[i][x]) pushdown(i,x);
int mid=l+r>>1;
if (ls<=mid) change(i,ll(x),l,mid,ls,rs,v);
if (rs>mid) change(i,rr(x),mid+1,r,ls,rs,v);
pushup(i,x);
}
int ask(int i,int x,int l,int r,int ls,int rs)
{
if (l>rs||r<ls) return 0;
if (l>=ls&&r<=rs) return sum[i][x];
if (laz[i][x]) pushdown(i,x);
int mid=l+r>>1;
return ask(i,ll(x),l,mid,ls,rs)+ask(i,rr(x),mid+1,r,ls,rs);
}
int main()
{
cin>>n>>t>>m;
build(1,1,1,n);
char s[3];int l,r,v;
for (int i=1;i<=m;++i) {
scanf("%s%d%d",s,&l,&r);
if (l>r) swap(l,r);
if (s[0]=='C') {
scanf("%d",&v);
for (int k=1;k<=t;++k)
if (k!=v)
change(k,1,1,n,l,r,0);
else change(k,1,1,n,l,r,1);
}
else {
int ans=0;
for (int k=1;k<=t;++k)
if (ask(k,1,1,n,l,r))
++ans;
printf("%d\n",ans);
}
}
return 0;
}
洛谷 P1558 色板游戏的更多相关文章
- 洛谷P1558 色板游戏 [线段树]
题目传送门 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...
- 洛谷P1558 色板游戏
题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L.现在色板上只有 ...
- P1558 色板游戏 状压线段树
P1558 色板游戏 状压线段树 题面 洛谷P1558 每次不同颜色覆盖一段区间,每次询问一段区间有多少种颜色 因为颜色数\(T\)很小,使用二进制表示状态当前区间有那些颜色,二进制第\(i\)位表示 ...
- P1558 色板游戏
P1558 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...
- 洛谷 P2197 nim游戏
洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...
- 洛谷 P1965 转圈游戏
洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...
- AC日记——色板游戏 洛谷 P1558
色板游戏 思路: sb题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 struct Tre ...
- 洛谷 P1000 超级玛丽游戏
P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
随机推荐
- KodExplorer介绍
KodExplorer介绍 KOD·简介 官方网站https://kodcloud.com/ KodExplorer可道云,原名芒果云,是一款基于 PHP 开发的开源 WEB 网页版轻量级私有云和在线 ...
- [Functional Programming] Read and Transform Values from a State ADT’s State (get)
Many times we need to access and transform state, either in part or in full, to be used when calcula ...
- 使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境
使用jenkins+calabash+cocoapods搭建ios持续集成环境 持续集成 持续集成到底是什么呢?依据敏捷大师Martin Fowler的定义: 持续集成是一种软件开发实践. 在持续集成 ...
- linux命令之------vmstat使用
在linux命令中,vmstat是个经常用到的分析系统性能的命令之一,主要有两个参数:一个是采样频率,一个是采样的次数.如:vmstat 1 3,意思就是每隔1秒采样1次,总共采样3次. 统计次 ...
- php闭包使用例子
一.依据闭包实现一个容器 class Di { private $factory; public function set($id, $value) { $this->factory[$id] ...
- 解决eclipse中overlaps the location of another project: 'xxxx'
找遍网络发现各种解释,最常见的一种是: new -> android project -> create project from exist source出现如下错误信息:Invalid ...
- Lua学习十----------Lua数组
© 版权声明:本文为博主原创文章,转载请注明出处 1.LUA数组 - 一维数组 - 多维数组 2.array.lua -- 一维数组 print("一维数组") array1 = ...
- Quartus和ISE调用Synplify进行综合的问题
分别尝试采用Quartus和ISE调用第三方综合软件Synplify进行综合. [软件版本] Quartus II 13.0 (SP).ISE 14.4 .Synplify 201303. [问题描述 ...
- POJ 3252 Round Numbers 数学题解
Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...
- 已经mock类中引用的其它service类,但是在invoke私有方法的时候,该service类是空值
错误原因:没有在开始测试用例的时候,初始化类的所有注解方法. 解决方法: 使用mock方法创建mock对象时,需要在测试用例执行前执行以下代码.通常, 这句代码可以放在测试基类或者@Before 中. ...