洛谷 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爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
随机推荐
- 为windows开启winrm service, 以便进行远程管理
为windows开启winrm service, 以便进行远程管理 是windows 一种方便远程管理的服务:开启winrm service,便于在日常工作中,远程管理服务器,或通过脚本,同时管理 ...
- Android Crash 定位
本文介绍了如何在 Android 手机发生 Crash 时进行 Log 分析的方法, 它可以帮助测试人员快速定位 Android 手机 Crash 发生的原因,同时给研发人员提供有效修改 Bug 的 ...
- java学习笔记——大数据操作类
java.math包中提供了两个大数字操作类:BigInteger(大整数操作类) BigDecimal(大小数操作类). 大整数操作类:BigInteger BigInteger类构造方法:publ ...
- MPTCP 理解
背景 随着技术的发展许多设备具有了多个网络接口,而TCP依然是一个单线路的协议,在TCP的通信过程中发端和收端都 不能随意变换地址.我们可以利用多个网络接口的这一特性来改善性能和有效冗余.例 ...
- badblocks检测磁盘坏道
1.检测整个盘如/dev/sdb #badblocks -v /dev/sdb > badsectors.txt 2.检测一个分区#badblocks -v /dev/sdb1 > bad ...
- Linux组件封装(四)使用RAII技术实现MutexLock自动化解锁
我们不止一次写过这种代码: { mutex_.lock(); //XXX if(....) return; //XXX mutex_.unlock(); } 显然,这段代码中我们忘记了解锁.那么如何防 ...
- HDU4674 Trip Advisor
Problem Description There is a strange country somewhere which its transportation network was built ...
- unsigned int与int相加问题
作者 : 卿笃军 一道unsigned int与int类型的相加题目.引发了我对这个问题的思考. 首先要明确两个问题: 问题一. unsigned int 和 int究竟哪个能表达出来的数上限大呢? ...
- 【转】 IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人
本文转载于:https://blog.csdn.net/qq_27093465/article/details/52918873 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便 ...
- Spring使用经验之StandardServletMultipartResolver实现文件上传的基本配置
Note:Spring使用版本是4.1.6.RELEASE 1. 在实现了AbstractAnnotationConfigDispatcherServletInitializer的类中重载custom ...