洛谷P1558 色板游戏

题目背景

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

题目描述

色板长度为\(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 \leq L \leq 100000)\), \(T (1 \leq T \leq 30)\)\(O (1 \leq O \leq 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

思路:正解貌似是基于二进制来建线段树,但是我不会……于是我就非常暴力的建了\(t\)棵线段树,因为\(t\)只有\(30\)嘛,所以建\(30\)棵线段树也不会爆,没棵线段树代表一个颜色,然后对于每一个\(C\)操作,就是修改要修改的那个颜色的对应线段树的对应修改区间为\(1\),其余线段树的对应修改区间修改为\(0\),然后查询就是把每棵线段树的区间颜色数加起来。但是代码可能因为常数优化的不太好等原因,不开\(O(2)\)\(TLE\)一个点。

代码:

#include<cstdio>
#include<algorithm>
#define maxn 100007
#define ls rt<<1
#define rs rt<<1|1
#define re register
using namespace std;
int n,t,m,sum[31][maxn<<2],lazy[31][maxn<<2];
char s[2];
inline void pushup(int i, int rt) {sum[i][rt]=sum[i][ls]+sum[i][rs];
}
inline void pushdown(int i, int rt) {if(lazy[i][rt]==-1) {sum[i][ls]=sum[i][rs]=0;lazy[i][ls]=lazy[i][rs]=-1; }else {lazy[i][ls]=lazy[i][rs]=lazy[i][rt];sum[i][ls]=sum[i][rs]=lazy[i][rt];}lazy[i][rt]=0;
}
void build(int rt, int l, int r) {if(l==r) {sum[1][rt]=1;return;}int mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);pushup(1,rt);
}
void modify(int i, int rt, int l, int r, int L, int R, int val) {if(L>r||R<l) return;if(L<=l&&r<=R) {sum[i][rt]=val;if(!val) lazy[i][rt]=-1;else lazy[i][rt]=val;return;}if(lazy[i][rt]) pushdown(i,rt);int mid=(l+r)>>1;if(L<=mid) modify(i,ls,l,mid,L,R,val);if(R>mid) modify(i,rs,mid+1,r,L,R,val);pushup(i,rt);
}
int csum(int i, int rt, int l, int r, int L, int R) {if(L>r||R<l) return 0;if(L<=l&&r<=R) return sum[i][rt];if(lazy[i][rt]) pushdown(i,rt);int mid=(l+r)>>1;return csum(i,ls,l,mid,L,R)+csum(i,rs,mid+1,r,L,R);
}
int main() {scanf("%d%d%d",&n,&t,&m);build(1,1,n);for(re int i=1,l,r,v;i<=m;++i) {scanf("%s%d%d",s,&l,&r);if(l>r) swap(l,r);if(s[0]=='C') {scanf("%d",&v);for(re int k=1;k<=t;++k) {if(k!=v) modify(k,1,1,n,l,r,0);else modify(k,1,1,n,l,r,1);}}else {int zrj=0;for(re int k=1;k<=t;++k) if(csum(k,1,1,n,l,r)) zrj++;printf("%d\n",zrj);}}return 0;
}

转载于:https://www.cnblogs.com/grcyh/p/10172894.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

兰德公司发布《美国5G时代》报告

来源&#xff1a;微信公众号科技咨询频道作者&#xff1a;谢黎、张志强&#xff0c;中国科学院成都文献情报中心兰德公司2021年5月24日发布《美国5G时代&#xff1a;在保障国家和人民的同时获得竞争优势》报告。报告援引美国国防创新委员会、联邦政府的观点&#xff0c;声称5G是…

7-3 银行排队问题之单队列多窗口服务 (25 分)

7-3 银行排队问题之单队列多窗口服务 (25 分) 假设银行有K个窗口提供服务&#xff0c;窗口前设一条黄线&#xff0c;所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时&#xff0c;下一位顾客即去该窗口处理事务。当有多个窗口可选择时&#xff0c;假设顾客总是选择编号…

Win32 程序运行原理

处理器的3工作方式&#xff1a;实模式&#xff0c;保护模式&#xff0c;虚拟86模式。CPU的主要工作在保护模式下。Windows操作系统就是运行在保护模式下的&#xff1b;Windows多任务的实现&#xff1a;任务间的切换提供了良好条件&#xff0c;多任务隔离&#xff0c;每个任务都…

40年诞生7位诺奖得主,美国贝尔实验室做对了什么?

贝尔实验室从1940年到1979年&#xff0c;共40年&#xff0c;历经4位总裁。这4位总裁在不同时期根据当时的形势&#xff0c;都提出了自己的管理方针&#xff0c;领导着该实验室近万名工作人员和几千名的科学家和工程师为世界和美国的科技发展作出了重要的贡献。来源&#xff1a;…

图书管理销售系统需求分析报告,对性能的规定以及运行环境规定部分

负责人&#xff1a;皮皮周(20160401085) 国字号(20160401105 完成工作&#xff1a; 3.3对性能的规定3.3.1精度 软件的输入精度:如果输入为数字,小数点后保留2位有效数字;如果输入为字符串,其长度限定为16位。 输出数据精度的要求: 如果输出为数字,小数点后保留…

7-4 堆栈模拟队列 (25 分)

7-4 堆栈模拟队列 (25 分) 设已知有两个堆栈S1和S2&#xff0c;请用这两个堆栈模拟出一个队列Q。 所谓用堆栈模拟队列&#xff0c;实际上就是通过调用堆栈的下列操作函数: int IsFull(Stack S)&#xff1a;判断堆栈S是否已满&#xff0c;返回1或0&#xff1b; int IsEmpty (…

H5唤醒app,不完全兼容

---ps---最近新发现一个开源的H5唤醒app的库&#xff1a;建议使用第三方开源库https://github.com/suanmei/callapp-lib实现&#xff1b;或者极光魔链&#xff08;后期可能会收费&#xff09;https://www.cnblogs.com/SimonHu1993/p/10578775.html<script type"text/ja…

7-5 列车厢调度 (25 分)

7-5 列车厢调度 (25 分) 1 <--移动方向/ 3 \2 -->移动方向大家或许在某些数据结构教材上见到过“列车厢调度问题”&#xff08;当然没见过也不要紧&#xff09;。今天&#xff0c;我们就来实际操作一下列车厢的调度。对照上方的ASCII字符图&#xff0c…

64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多

前言&#xff1a; cpu的位是指一次性可处理的数据量是多少&#xff0c;1字节8位&#xff0c;32位处理器可以一次性处理4个字节的数据量&#xff0c;依次类推。32位操作系统针对的32位的CPU设计。64位操作系统针对的64位的CPU设计。操作系统只是硬件和应用软件中间的一个平台。我…

长二F发射神十二飞船圆满成功!三名航天员飞向空间站天和核心舱

来源&#xff1a;中国航天科技集团文&#xff1a;陈立 刘岩编辑&#xff1a;杨成 高一鸣校对&#xff1a;林佳昕监制&#xff1a;索阿娣6月17日9时22分长征二号F运载火箭点火起飞中国航天员聂海胜、刘伯明、汤洪波乘坐神舟十二号载人飞船在“神箭”长二F托举下从酒泉卫星发射中…

codevs 3288 积木大赛

3288 积木大赛 &#xff08;2013年NOIP全国联赛提高组&#xff09; 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为 n 的大厦&#xff0c;大厦可以看成由 n 块宽…

定义变量类型

typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef void far *LPVOID; typedef int INT; typedef unsigned int UINT; 变量的“匈牙利表示法”&#xff1a; lp为前缀&#xff1a;指针类…

.net core中不支持GB2312编码的问题

今天在用core实现读取文件内容时出现了中文乱码的问题&#xff0c;特此记录下。代码如下&#xff1a;static void Main(string[] args){string path "F:\\1.txt";StreamReader sr new StreamReader(path, Encoding.Default);String line;while ((line sr.ReadLine…

java中Scanner类的使用

1.导入包 java.util.Scanner; 代码 import java.util.Scanner;&#xff08;不要忘记分号&#xff09; 2.创建Scanner对象 代码&#xff1a;Scanner inputnew Scanner(System.in); 3.创建变量接受输入 代码&#xff1a; int ainput.nextInt(); 显然&#xff0c;此代码只能输入一…

脑机融合技术的哲学审思

来源&#xff1a;《科学技术哲学研究》2020年第6期作者&#xff1a;张学义&#xff08;东南大学哲学与科学系&#xff09;潘平平&#xff08;华为南京所&#xff09;庄桂山&#xff08;东南大学成贤学院&#xff09;国家社科基金重大项目“问题哲学理论前沿与理论创新研究”(18…

“哪里有人喜欢孤独,不过是害怕失望罢了”———村上春树《东尼泷谷》观后感...

每个人发自内心的感受&#xff0c;都是孤独的&#xff0c;哪怕表面多么欢快。 ——By 浪漫Chopin 配乐&#xff1a; http://music.163.com/song/498210/?userid539620943 东尼的一生都是孤独的&#xff0c;生下来父亲带他到处流浪&#xff0c;对他不管不问。 他自己做饭&…

windows定时计划备份MySql

使用 MySql 的 mysqldump 将数据库文件备份成 sql 文件。 Windows下备份 本地的数据库环境 MySql 安装环境&#xff1a;C:\MySql 数据库名称&#xff1a;bbs root root 数据库备份目的地&#xff1a; D:/Data_BackUp echo off set "Ymd%date:~,4%%date:~5,2%%date:~8,2%&q…

“新一代城市大脑建设与发展“专家研讨会

2021年6月城市大脑全球标准研究组成员在国家级核心期刊发表论文&#xff08;6月末出版&#xff09;&#xff0c;阐述了关于城市大脑的最新进展&#xff0c;基于城市大脑全球标准研究&#xff0c;形成新一代城市大脑的“1N”模式建设方案和九个实施步骤&#xff1b;突出了直接应…

进程的控制——获取系统进程信息

获取系统进程 ToolHelp函数&#xff1b;CreateToolhelp32Snapshot函数获取当前系统内执行的进程拍快照&#xff08;Snapshot&#xff09;&#xff0c;即获得进程列表&#xff1b;Process32First函数和Process32Next函数遍历列表&#xff1b;快照头文件&#xff1a;#include<…