题意:

给n,m,k,n长度,k个操作,m种颜色

操作C:输入A,B,C,区间【A,B】变成C颜色,可能A>B,所以要确保A<B

操作P:输入A,B,区间【A,B】的颜色种类

思路:

因为颜色只有30种,可以用位运算,然后进行lazy标记

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define it register int
#define inf 0x3f3f3f3f
#define lowbit(x) (x)&(-x)
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 998244353
const int maxn=1e6+;
int n,m,k;
int tree[maxn],lazy[maxn];
il void pushdown(int x){
if(lazy[x]){
tree[x<<]=lazy[x];tree[x<<|]=lazy[x];
lazy[x<<]=lazy[x];lazy[x<<|]=lazy[x];
lazy[x]=;
}
}
il void pushup(int x){
tree[x]=tree[x<<]|tree[x<<|];
}
void build(int x,int l,int r){
if(l==r){
tree[x]=;return;
}
int mid=(l+r)>>;
build(x<<,l,mid);
build(x<<|,mid+,r);
pushup(x);
}
void update(int x,int l,int r,int l1,int r1,int zhi){
if(l1<=l && r<=r1){
pushdown(x);
int w=(ll)<<(zhi-);
lazy[x]=w;tree[x]=w;
return;
}
pushdown(x);
int mid=(l+r)>>;
if(l1<=mid){
update(x<<,l,mid,l1,r1,zhi);
}
if(r1>mid){
update(x<<|,mid+,r,l1,r1,zhi);
}
pushup(x);
}
int query(int x,int l,int r,int l1,int r1){
if(l1<=l && r<=r1){
return tree[x];
}
pushdown(x);
int temp=;
int mid=(l+r)>>;
if(l1<=mid){
temp|=query(x<<,l,mid,l1,r1);
}
if(r1>mid){
temp|=query(x<<|,mid+,r,l1,r1);
}
return temp;
}
int main(){
char c;
scanf("%d%d%d",&n,&m,&k);
build(,,n);
for(it i=;i<k;i++){
//getchar();
scanf("%s",&c);
if(c=='C'){
int A,B,C;
scanf("%d%d%d",&A,&B,&C);
if(A>B){swap(A,B);}
update(,,n,A,B,C);
}
else{
int A,B;
scanf("%d%d",&A,&B);
if(A>B){swap(A,B);}
int sum=query(,,n,A,B),ans=;
for(it j=;j<m;j++){
if(sum&(<<j)){ans++;}
}
printf("%d\n",ans);
}
}
return ;
}

这道题我wa了一个晚上,调了一个晚上,自闭了一个晚上

第二天早上,重写还是wa,实在是搞不定了,去看了题解。感觉没差,然后把题解交上ac????

然后照着题解写了一边又wa,???最后在讨论区瞧见了一个解释……

我举报这题坑爹。不过让我涨了%c %s getchar()的认知

这题用getchar();scanf("%c",&c);就是wa到死

换成scanf(" %c",&c);或者scanf("%s",&c);就AC

从未考虑这一块的我理所当然的用了getchar();还拼命找错,记住了

P1558 色板游戏 线段树(区间修改,区间查询)的更多相关文章

  1. [线段树]区间修改&区间查询问题

    区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...

  2. 洛谷P1558 色板游戏 [线段树]

    题目传送门 色板游戏 题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, .. ...

  3. SPOJ GSS2 - Can you answer these queries II(线段树 区间修改+区间查询)(后缀和)

    GSS2 - Can you answer these queries II #tree Being a completist and a simplist, kid Yang Zhe cannot ...

  4. Hdu 1698(线段树 区间修改 区间查询)

    In the game of DotA, Pudge's meat hook is actually the most horrible thing for most of the heroes. T ...

  5. SPOJ BGSHOOT - Shoot and kill (线段树 区间修改 区间查询)

    BGSHOOT - Shoot and kill no tags  The problem is about Mr.BG who is a great hunter. Today he has gon ...

  6. P1558 色板游戏 (线段树)

    题目链接 Solution 一个简单的 或 线段树.竟然坑了我一个小时... 因为颜色很小,所以把状态压起来. 然后每个节点上的数值代表当前颜色状态. 然后节点合并很简单,直接或起来. 需要注意一下的 ...

  7. A Simple Problem with Integers POJ - 3468 线段树区间修改+区间查询

    //add,懒标记,给以当前节点为根的子树中的每一个点加上add(不包含根节点) // #include <cstdio> #include <cstring> #includ ...

  8. P1558 色板游戏 线段树+二进制状压

    好,这个想法是我想拿去做HH的项链的.但是那个颜色有十万种...直接爆. 做这个倒是so easy 被两个地方坑了.1,a,b可能大小相反. 2,ask之前要down一波,我没down就挂了..... ...

  9. I Hate It(线段树点修改区间查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others) ...

随机推荐

  1. 题解【AcWing95】费解的开关

    题面 一道非常好的递推练习题. 我们考虑每次枚举第一行的操作,由上一行的状态递推出下一行的状态,最后判断最后一行是否全部为 \(1\) 即可. 实现代码时要注意一些细节问题. #include < ...

  2. Qt Gui 第一章~第二章

    一.Qt启动 qmake -project; 创建xxx.pro qmake xxx.pro; 生成makefile文件 make:构建该程序,生成可执行文件 运行程序:windows:xxx:mac ...

  3. [TJOI2009] 猜数字 - 中国剩余定理

    现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意的i,n ...

  4. 如何架构一个 React 项目?

    编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有 ...

  5. 安装python3.7.4时报错:Service Pack 1 is required to continue installation

    python3.7.4安装失败:Service Pack 1 is required to continue installation 解决办法: 点击报错页面中的“log file”,日志最后一行显 ...

  6. Python读取Excel,日期列读出来是数字的处理

    Python读取Excel,里面如果是日期,直接读出来是float类型,无法直接使用. 通过判断读取表格的数据类型ctype,进一步处理. 返回的单元格内容的类型有5种: ctype: 0 empty ...

  7. HTML文本域标签

    textarea文本域 cols指定列数 rows行数(不够用会自动扩容)

  8. C++-POJ2975-Nim

    题目把Nim游戏为什么可以取异或和讲解得十分清楚,建议多读几次,理解一下 再一个,可以把每次异或视为一次取数,因此(k[i]^sg)<k[i]即为一种可行操作 /* Nim is a 2-pla ...

  9. Js 事件委托 解决动态元素不能click点击的问题

    参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...

  10. 解决PHP Redis扩展无法加载的问题

    最近在工作中需要使用PHP访问Redis,从https://github.com/phpredis/phpredis下载了phpredis,并且按照官方的说明进行了安装 phpize ./config ...