题目背景

阿宝上学了,今天老师拿来了一块很长的涂色板。

题目描述

色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格。并从左到右标记为1, 2, ... L。

现在色板上只有一个颜色,老师告诉阿宝在色板上只能做两件事:

  1. "C A B C" 指在A到 B 号方格中涂上颜色 C。
  2. "P A B" 指老师的提问:A到 B号方格中有几种颜色。

学校的颜料盒中一共有 T 种颜料。为简便起见,我们把他们标记为 1, 2, ... T. 开始时色板上原有的颜色就为1号色。 面对如此复杂的问题,阿宝向你求助,你能帮助他吗?

输入格式

第一行有3个整数 L (1 <= L <= 100000), T (1 <= T <= 30) 和 O (1 <= O <= 100000)。 在这里O表示事件数。
接下来 O 行, 每行以 "C A B C" 或 "P A B" 得形式表示所要做的事情(这里 A, B, C 为整数, 可能A> B,这样的话需要你交换A和B)

输出格式

对于老师的提问,做出相应的回答。每行一个整数。

输入输出样例

输入 #1
2 2 4
C 1 1 2
P 1 2
C 2 2 2
P 1 2

输出 #1
2
1

思路:

线段树模板题!!!

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;const int N=400010;char u;
int n,t,c,x,y,k;
int sum[N],ad[N];void pushup(int rt) {sum[rt]=sum[rt<<1]|sum[rt<<1|1];
}void build(int rt,int l,int r) {if (l==r) {sum[rt]=1<<1;return;}int m=(l+r)>>1;build(rt<<1,l,m);build(rt<<1|1,m+1,r);pushup(rt);
}void pushdown(int rt,int l,int r) {if (ad[rt]) {sum[rt<<1]=(1<<ad[rt]);sum[rt<<1|1]=(1<<ad[rt]);ad[rt<<1]=ad[rt];ad[rt<<1|1]=ad[rt];ad[rt]=0;}
}void update(int rt,int l,int r,int x,int y,int k) {if (l>y||x>r)return;if (x<=l&&r<=y) {sum[rt]=(1<<k);ad[rt]=k;return;}pushdown(rt,l,r);int m=(l+r)>>1;if (m>=x)update(rt<<1,l,m,x,y,k);if (m<y)update(rt<<1|1,m+1,r,x,y,k);pushup(rt);
}int query(int rt,int l,int r,int x,int y) {if(l>y||x>r)return 0;if(x<=l&&r<=y)return sum[rt];pushdown(rt,l,r);int m=(l+r)>>1,ans=0;if(m>=x)ans|=query(rt<<1,l,m,x,y);if(m<y)ans|=query(rt<<1|1,m+1,r,x,y);return ans;
}int main () {scanf("%d%d%d",&n,&c,&t);build(1,1,n);while(t--) {cin>>u;if(u=='C') {scanf("%d%d%d",&x,&y,&k);if (x>y)swap(x,y);update(1,1,n,x,y,k);} else {scanf("%d%d",&x,&y);if(x>y)swap(x,y);int p=query(1,1,n,x,y),ans=0;for (int i=1; i<=c; i++)if (p&(1<<i))ans++;printf("%d\n",ans);}}return 0;
}

转载于:https://www.cnblogs.com/mysh/p/11318746.html

P1558 色板游戏相关推荐

  1. 洛谷 P1558 色板游戏

    传送门:洛谷 P1558 色板游戏 算法分析:观察到数据范围:\(1\leq T\leq 30\) ,考虑使用二进制来进行状态压缩 将颜色\(x\)表示为 \(1<<(x-1)\) 即 \ ...

  2. 【luogu P1558 色板游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1558 我知道三十棵线段树很暴力,可是我们可以状压啊. 颜色最多30,不会爆int 另外 吐槽评测机 #inc ...

  3. 洛谷P1558 色板游戏

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

  4. luogu 1558 色板游戏

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

  5. 计蒜客实训进阶挑战部分题目题解

    JiSuanKe_Training_Challenge 0x01-0x04 题目难度一般且较经典,故此处略 0x05-0x0a 题目均在nanti.jisuanke.com 题目后给出一些类似题目以供 ...

  6. 微信h5开发案例-- HTML5小游戏忆童年

    相信大家小时候都玩过调色板游戏,TOM游戏定制平台忆童年活动同步上线了数款游戏,其中一版就和颜色有关,就是今天小编为大家带来的<色彩传递>,本作尤其适合测试小朋友对颜色的敏感度,又好玩还能 ...

  7. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  8. 游戏中的颜色:深度解析游戏设计工具

    有关颜色的知识横跨好几个学科,比如物理学.生物学.心理学.艺术和设计.对于美术师们来说,颜色是创造感情非常有用的工具,对于游戏设计师们来说,它是强调功能最有用的方式,对于营销者们来说,可以用颜色对产品 ...

  9. 腾讯游戏主美:二次元卡通渲染有哪些黑科技?

    今年,<原神>的出现让行业注意到了三渲二这种独特的画风.但在二次元游戏中,<原神>其实并非第一个吃螃蟹的人.作为腾讯游戏魔方工作室群<王牌战士>项目组的主美,谢海天 ...

最新文章

  1. python学习费用-在上海学Python贵吗?Python培训费用是多少
  2. 本题要求实现函数输出n行数字金字塔。_练习5-3 数字金字塔 (15分)
  3. 深度限流装置是什么_集团公司首例零损耗深度限流装置顺利投运
  4. pdns backend mysql_安装PowerDNS(与MySQL后端)和Poweradmin在Debian蚀刻
  5. 学习Spring(四) -- Spring的继承与依赖
  6. Linux系统中的nmap命令与netstat命令
  7. Visual Studio 2017各版本安装包离线下载、安装全解析
  8. vue.js可视化开发工具_Vue.js开发工具
  9. 鄂尔多斯固体废物智慧化管理平台设备和功能概况
  10. 2020强网杯部分题目复现
  11. 飞腾CPU BIOS固件生成教程
  12. 图标绘制入门1:简单介绍及图标设计规范
  13. 电影天堂电视剧批量下载的地址
  14. chrom调试技巧大全,史上最全
  15. 复工复产,利用Python爬虫爬取火车票信息
  16. 1.基于S5PV210的图片解码播放器(详解)
  17. plc通讯的握手信号_介绍MES与PLC集成时的几种握手方式及特点
  18. 类型“DropDownList”的控件“ContentPlaceHolder1_ddlDepartment”必须放在具有 runat=server 的窗体标记内。
  19. 详解 MySQL 高可用群集,MMM搭建高可用
  20. 图像在计算机中是如何存储的

热门文章

  1. 认识大蟒:Python 快速入门 | 周末送书
  2. python数据分析可视化实例-Python数据分析与可视化从入门到精通
  3. 基于PHP+MySQL企业网站的设计与开发
  4. 7位号段、运营商、归属地数据爬取与解析
  5. 环形光源matlab仿真,一种多角度环形光源的制作方法
  6. HTML -JavaScript--模拟病毒
  7. New eBooks Available for Subscribers
  8. 刷脸支付帮助线下实体经济突破营销困境
  9. jdk-8u191-windows-x64.exe下载
  10. html网页中必填符号图片,收集的web页面html中常用的特殊符号大全