色板游戏(洛谷 1558)
题目背景
阿宝上学了,今天老师拿来了一块很长的涂色板。
题目描述
色板长度为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)
输出格式:
对于老师的提问,做出相应的回答。每行一个整数。
输入输出样例
2 2 4 C 1 1 2 P 1 2 C 2 2 2 P 1 2
2 1
/*可以选择状态压缩,把30种颜色装换成二进制,这样单点修改就行了;也可以用vis数组维护,这样要区间修改,每次查询更新vis数组,lz用第二种方法做的。 */ #include<cstdio> #include<iostream> #include<cstring> #define lson l,mid,now*2 #define rson mid+1,r,now*2+1 #define M 100010 #define N 32 using namespace std; int sum[M*4],tag[M*4],vis[N],n,t,m; void push_up(int now) {if(sum[now*2]==sum[now*2+1])sum[now]=sum[now*2];else sum[now]=-1; } void push_down(int now) {if(!tag[now])return;tag[now*2]=tag[now];sum[now*2]=tag[now];tag[now*2+1]=tag[now];sum[now*2+1]=tag[now];tag[now]=0; } void change(int x,int y,int v,int l,int r,int now) {if(l>=x&&r<=y){sum[now]=tag[now]=v;return;}push_down(now);int mid=(l+r)/2;if(x<=mid)change(x,y,v,lson);if(y>mid)change(x,y,v,rson);push_up(now); } void query(int x,int y,int l,int r,int now) {if(l>=x&&r<=y&&sum[now]!=-1){vis[sum[now]]=1;return;}push_down(now);int mid=(l+r)/2;if(x<=mid)query(x,y,lson);if(y>mid)query(x,y,rson); } int main() {scanf("%d%d%d",&n,&t,&m);for(int i=1;i<=n;i++)change(i,i,1,1,n,1);for(int i=1;i<=m;i++){char c;cin>>c;if(c=='C'){int x,y,v;scanf("%d%d%d",&x,&y,&v);if(x>y)swap(x,y);change(x,y,v,1,n,1);}else{memset(vis,0,sizeof(vis));int x,y,tot=0;scanf("%d%d",&x,&y);if(x>y)swap(x,y);query(x,y,1,n,1);for(int i=1;i<=t;i++)if(vis[i])tot++;printf("%d\n",tot);}}return 0; }
View Code
转载于:https://www.cnblogs.com/harden/p/5862460.html
色板游戏(洛谷 1558)相关推荐
- 广度优先搜索——好奇怪的游戏(洛谷 P1747)
题目选自洛谷P1747 简单的广搜模板题,4+8 = 12个方向进行bfs,目的地是(1,1) 每次查看队首是否到达,若到达(1,1) 则返回队首步长即可~ 需要注意的是,马走日和像走田的位置计算 i ...
- 模拟——扫雷游戏(洛谷 P2670)
模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P2670 也是一道简单模拟的题,没有必要列举出8个if语句逐一判断8个方向, 只需要用一个二维数组来保存8个方向即可. 需要注 ...
- AC日记——欧几里得的游戏 洛谷 P1290
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- 2019年东莞特长生 游戏(洛谷 P2661 信息传递)
Description 某校科技节到了,有? 个同学(编号为1到?)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为? 的同学的信息传递对象是编号为??的同学. 游戏开始 ...
- 洛谷:P1129 [ZJOI2007] 矩阵游戏(二分图最大匹配)
洛谷:矩阵游戏 洛谷题解就挺好 目的是使得最终(1,1)(2,2)-(n,n)都有一个点 可以看作为,最终状态需要每 i 行和 i 列都存在一个匹配 建图方式:对于 i 行 j 列的1点,建一条 i ...
- 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...
- 洛谷P1000 超级玛丽游戏C++题解
首先我们看这道题的题目"超级玛丽游戏",第一道题就让我们写个游戏出来.结果点进去一看,顿时觉得这道题是在开玩笑,本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续 ...
- 洛谷解题P1000 超级玛丽游戏(C++)
此文章关于洛谷P1000 超级玛丽游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1000题目的解析: 先看题 ...
- 洛谷:P1129 [ZJOI2007] 矩阵游戏
题目链接:P1129 [ZJOI2007] 矩阵游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解题思路: 首先不知道最大匹配数概念的可以看看这篇博客: (5条消息) 二分图及 ...
- 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
P1428 小鱼比可爱 小鱼比可爱 - 洛谷 P1427 小鱼的数字游戏 小鱼的数字游戏 - 洛谷 P5727 [深基5.例3]冰雹猜想 [深基5.例3]冰雹猜想 - 洛谷 P5727 [深基5.例3 ...
最新文章
- 总结概括对于大数据、高并发的网站如何进行优化的问题
- Android 即时通讯开发小结(二)
- Single System Image的理解
- 一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0
- CentOS下安装Memcached,Linux下安装Memcached,centos下安装memcached,linux下安装memcached...
- 自制hdmi线一头改vga图_东莞VGA数据线厂商价格
- java证书 查看cacer_R 语言关于 SSL 证书异常处理笔记
- 各种门锁的内部结构图_逃生门锁,我们的生命之锁!
- 【狂神说Redis】2Redis入门 2-2Redis部署在Linux(Ubuntu)
- Java实现将阿拉伯数字转换为中文数字123=》一二三
- Center OS和Linux的区别
- 【C语言】入门基础选择题附答案
- smali 添加资源
- pdf照片显示正常打印时被翻转_现场确认完没事了?准考证打印要注意哪些细节!...
- 严蔚敏《数据结构》——二叉树
- P5656 【模板】二元一次不定方程 (exgcd)(公约数)
- 怎么做好备件管理?备件管理系统都包括哪些功能模块?
- PS2021 入门使用技巧
- sql注入——布尔注入
- antd3.x版本table使用fixed错位问题修复