洛谷 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爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
随机推荐
- 纯css 实现 三角形、梯形等 效果
今天一个刚开始学习html 的小白问我一个问题,css 可以实现正方形,长方形,和圆型(border-radius),怎么能做出个三角形.梯形等等形状呢?于是我便开启了装逼模式, 给他讲解了一下我的思 ...
- 使用BAT编译,链接,执行汇编代码
大家都知道汇编程序(MASM)的上机过程,先要对源代码进行汇编. 连接,然后再执行,而这中间有很多环节需要输入很多东西,麻烦的很(只有经历过的朋友才懂得).如何使这个过程变的简单呢?在我们搞汇编课程设 ...
- A read-only user or a user in a read-only database is not permitted to disable
A read-only user or a user in a read-only database is not permitted to disable 出现如题的问题通常是由于db.lck的所属 ...
- VB断点调试
最近都在敲机房收费系统,这个系统是我们第一次自己在没有源代码的情况下进行的系统. 写程序的时候逻辑非常重要,可是我们还要清楚非常多时候你以为的并非你以为的! 就像在敲机房的时候,我们明明理清了逻辑.并 ...
- 小猪的Git使用总结
小猪的Git使用总结 文件夹 小猪的Git使用总结 安装配置与文档 下载安装 文档教程相关 概念 Git的四个组成部分 文件的几个状态 Git与SVN版本号版本号控制存储差异 每次Commit时仓库中 ...
- Android Shader 颜色、图像渲染 paint.setXfermode
Shader Shader是一个基类,表示在绘制期间颜色的水平跨度 它的子类被嵌入在Paint中使用,调用paint.setShader(shader). 除Bitmap外的其他对象,使用该Paint ...
- ZooKeeper安装与执行
首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有"bin,conf,lib"等文件夹. "bin文件夹"中存放有执行脚 ...
- java中替换双引号 Java问题通用解决代码 Java问题通用解决代码
http://blog.csdn.net/newhappy2008/article/details/4785263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- Spring Boot从入门到实战:整合通用Mapper简化单表操作
数据库访问是web应用必不可少的部分.现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多.通用Map ...
- iOS Masonry 查看更多 收起
Masonry 查看更多 收起效果实现,带动画 demo下载地址: https://github.com/qqcc1388/MasonryDemo