洛谷 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爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
随机推荐
- Unity载入和内存管理机制
Unity几种动态载入Prefab方式的差异: 事实上存在3种载入prefab的方式: 一是静态引用,建一个public的变量,在Inspector里把prefab拉上去,用的时候instantiat ...
- 每天一个JavaScript实例-展示设置和获取CSS样式设置
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 解决eclipse中overlaps the location of another project: 'xxxx'
找遍网络发现各种解释,最常见的一种是: new -> android project -> create project from exist source出现如下错误信息:Invalid ...
- 转: Genymotion使用及离线镜像的安装
Genymotion是一套完整的工具,它提供了Android虚拟环境.由于它比Android自带的模拟器要流畅好多,所以它简直就是开发者.测试人员.推销者甚至是游戏玩家的福音.支持Windows.Li ...
- 从两张Excel表所想到的
从两张Excel表所想到的 前几日,客服妹子发过来几张表,让我给她做下匹配,然后做了,想了,便有了这篇博文,不由感慨,看似简简单单的两张Excel表其实藏着好多东西,记叙如下,与君共勉. 最初的需求: ...
- ganlia安装配置文档
gangliaz在ubuntu中安装和配置很简单 1. 服务器端安装 sudo apt-get install ganglia-monitor ganglia-webfrontend rrdtool ...
- vi/vim复制粘贴命
1. 选定文本块.使用v进入可视模式,移动光标键选定内容. 2.复制的命令是y,即yank(提起) ,常用的命令如下: y 在使用v模式选定了某一块的时候,复制选定块到缓冲区用: ...
- 官方教程Stealth学习笔记(一)
今天開始要更新官方教程stealth的学习笔记啦, 我将会记录和解说一个小游戏基本的流程和关键地方的技巧. 我会依照官方教程的顺序来更新. ...
- [译]GLUT教程 - 重整子窗体
Lighthouse3d.com >> GLUT Tutorial >> Subwindows >> Reshape Subwindows 重整函数的回调需要处理两 ...
- centos7.2 开发 部署 .net core
1.centos7.2 安装 nginx官方文档:http://nginx.org/en/linux_packages.html#mainline 创建nginx.repo 文件 Pre-Built ...