POJ 2777 Count Color (线段树&位运算)

PID算法(位置式pid算法和增量式pid算法) PID 算法是闭环控制系统中常用的算法,PID 分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控。 阅读详情
Count Color


Time Limit: 1000MS  Memory Limit: 65536K

Description

Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. 

There is a very long board with length L centimeter, L is a positive integer, so we can evenly divide the board into L segments, and they are labeled by 1, 2, ... L from left to right, each is 1 centimeter long. Now we have to color the board - one segment with only one color. We can do following two operations on the board: 

1. "C A B C" Color the board from segment A to segment B with color C. 
2. "P A B" Output the number of different colors painted between segment A and segment B (including). 

In our daily life, we have very few words to describe a color (red, green, blue, yellow…), so you may assume that the total number of different colors T is very small. To make it simple, we express the names of colors as color 1, color 2, ... color T. At the beginning, the board was painted in color 1. Now the rest of problem is left to your. 

Input

First line of input contains L (1 <= L <= 100000), T (1 <= T <= 30) and O (1 <= O <= 100000). Here O denotes the number of operations. Following O lines, each contains "C A B C" or "P A B" (here A, B, C are integers, and A may be larger than B) as an operation defined previously.

Output

Ouput results of the output operation in order, each line contains a number.

Sample Input

2 2 4
C 1 1 2
P 1 2
C 2 2 2
P 1 2

Sample Output

2
1


注意A可以大于B。

/*360ms,2800KB*/

#include <cstdio>
#include <algorithm>
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
#define root 1, N, 1
const int maxn = 100000;

int sum[maxn << 2], add[maxn << 2];

inline void up(int rt)
{
	sum[rt] = sum[rt << 1] | sum[rt << 1 | 1];
}

inline void down(int rt)
{
	if (add[rt])
	{
		add[rt << 1] = add[rt << 1 | 1] = add[rt];
		sum[rt << 1] = sum[rt << 1 | 1] = add[rt];
		add[rt] = 0;
	}
}

void update(int ql, int qr, int c, int l, int r, int rt)
{
	if (ql <= l && r <= qr)
	{
		add[rt] = c;
		sum[rt] = c;
		return;
	}
	down(rt);
	int m = (l + r) >> 1;
	if (ql <= m) update(ql, qr, c, lson);
	if (qr > m) update(ql, qr, c, rson);
	up(rt);
}

int query(int ql, int qr, int l, int r, int rt)
{
	if (ql <= l && r <= qr)
	{
		return sum[rt];
	}
	down(rt);
	int m = (l + r) >> 1;
	int ret = 0;
	if (ql <= m) ret |= query(ql, qr, lson);
	if (qr > m) ret |= query(ql, qr, rson);
	return ret;
}

inline int cnt(int val)
{
	int n = 0;
	while (val)
	{
		if (val & 1) n++;
		val >>= 1;
	}
	return n;
}

int main()
{
	int N, Q, a, b, c;
	scanf("%d%*d%d", &N, &Q);
	fill(sum + 1, sum + (N << 2), 1);
	while (Q--)
	{
		getchar();
		if (getchar() == 'P')
		{
			scanf("%d%d", &a, &b);
			if (a > b) swap(a, b);
			printf("%d\n", cnt(query(a, b, root)));
		}
		else
		{
			scanf("%d%d%d", &a, &b, &c);
			if (a > b) swap(a, b);
			update(a, b, 1 << (c - 1), root);
		}
	}
	return 0;
}

ABAP 平台下配置 OAuth 2.0 Authorization Code 授权类型的完整指引 本文是面向ABAP管理员和SAP开发者的OAuth 2.0授权码配置实战指南。文章详细介绍了在ABAP平台启用Authorization Code的完整流程,包括前置条件检查(如TLS配置和系统用户准备)、SOAUTH2事务码中各字段配置要点(授权类型启用、Redirect URI设置、授权码有效期等)、Scope分配规则以及验证方法。通过一个销售订单OData接口的实际案例,说明了如何将抽象规范转化为具体配置。最后提供了多种验证方式(事务码测试、端点测试和Postman测试)以及关键配置参数(如授权码有效 阅读详情

相关推荐

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 952

线段树(区间树)之区间染色和4n推导过程

  前言   线段树(区间树)是什么呢?有了二叉树、二分搜索树,线段树又是干什么的呢?最经典的线段树问题:区间染色;正如它的名字而言,主要解决区间的问题   一、线段树说明   1、什么是线段树?   线段树首先是二叉树,并且是平衡二叉树(它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树),并且具有二分性质。 如下图,就是一颗线段树:    ...

weixin_30898109的博客 392

5分钟搞懂MSDNet:用Transformer实现小样本语义分割的保姆级教程

本文详细介绍了MSDNet(Multi-Scale Decoder Network)如何利用Transformer架构实现小样本语义分割。通过多尺度解码器和空间Transformer解码器,MSDNet能够在仅有1-5张标注图像的情况下完成精确分割任务。文章提供了PyTorch代码实例和优化技巧,帮助开发者快速掌握这一前沿技术。

weixin_30832143的博客 506

Count Color

题目:Count Color(计数颜色) poj题号:2777描述: 选择问题解决和程序设计作为可选课程,您需要解决各种问题。在这里,我们得到一个新的问题。长度为L厘米的长板,L为正整数,所以我们可以将板均匀分为L段,从左到右分别为1,2,… L,分别为1厘米长。现在我们必须为板子着色 - 只有一个颜色的一个部分。我们可以在板上执行以下两个操作: 1.“CAB C”将板A从段A到段B的颜色C.

ojzha的博客 1918

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1985

poj2777线段树区间染色

网上的代码有很多但是实现的方式不同,我个人还是比较喜欢带结构体的线段树, 然后本题的关键就在于维护颜色的问题上了, 结构体中的2个变量sum表示是第几种颜色,初始化为1 lazy表示之前是否染过色 如果染过色就把染过的色下传,然后在进行染色 然后就是判断这个点所代表区间的颜色,如果左右区间颜色不同,就令他的颜色为-1,相同就等于左右区间的颜色。 #include&lt;iost...

qq_42759120的博客 295

FPGA控制AD5754实现模数转换Verilog代码与测试激励

本文提供了使用FPGA控制AD5754芯片实现数字信号转模拟信号的Verilog代码和测试激励。AD5754芯片简介:AD5754是一款16位数字信号转模拟信号的芯片。通信方式:FPGA与AD5754之间通过SPI接口进行通信,SPI时钟clk的最大频率为30MHz。模拟输出:AD5754提供了四路模拟输出。工作方式:当前AD5754采用单极性工作方式。指令刷新:根据现有理解,同轴的速度和电流指令应同时刷新。利用LDAC引脚控制模拟信号的刷新,但需实际验证。CLR信号验证。

whm128的博客 246

线段树进阶-染色问题 附poj-2777题解

区域染色覆盖问题 假设某大学有一面文化墙,各个学院都可以在上面涂色,要求涂色区域高必须和墙一样,宽度任意但必须是整数(以米为单位)。涂色可以覆盖其他学院的涂色。现在若干个学院涂色之后最终这面墙上能看见多少种颜色。 这就是简单的染色问题了。当然有很多种不同的说法,但整体上离不开这两个问题:1.区域覆盖。2.多种染色方式。既然是区域操作,那么用线段树是比较合理了。用...

iwts 5373

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

流体动力学仿真软件:Star-CCM+_(19).软件定制与脚本编写

自定义插件开发可以扩展Star-CCM+的功能,实现特定的仿真需求。插件开发通常需要使用Java语言,并且需要对Star-CCM+的API有深入的了解。以下是一个简单的Java插件示例,展示如何创建一个自定义插件来显示仿真项目的信息。// 导入必要的Star-CCM+ API import star . ccm . product . CCMProject;// 自定义插件类 public class CustomPlugin {// 插件主方法 public void run() {

kkchenjj的博客 937

Count Color(线段树区间染色)

题目链接: Count Color 大致题意 有n个位置, 从1~n标号, 有两种操作: ​ ① C l r c 把区间[l, r]染色为c ​ ②P l r 询问[l, r]区间有多少种颜色. 解题思路 线段树区间染色 我拿到这题后, 这题不是傻逼题吗? 然后写了3h 其实以前我是有博客写过关于线段树区间染色问题的, 博客链接我们只需要用一个懒标记表示当前区间是什么颜色即可, 每次更新的时候, 我们都下放懒标记, 查询的时候不需要下放懒标记. 那么这个题我为什么做了这么久呢? (原因是网上的博客的写法都和

Fau的博客 1261

手把手教你学PCIE(1.38)--基本概念:ATU(地址转换单元)

ATU(Address Translation Unit)是一种硬件单元,用于在PCIe系统中进行地址转换。它将设备的本地地址(外部地址)转换为系统内存或配置空间中的全局地址(内部地址),反之亦然。ATU的工作原理:通过地址匹配和转换,确保事务能够在不同的地址空间之间正确路由。配置寄存器:通过配置寄存器来设置地址转换规则。应用场景:地址空间隔离、访问控制、动态地址管理、虚拟化和多租户。

MHD0815的博客 2055

POJ 2777 Count Color

POJ 2777 Count Color 题目链接 Description Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. There is a very long board with length L centimeter, L is a positive integer

旺崽的博客 2864

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

POJ 2777 Count Color(线段树)

题目地址:POJ 2777 我去。。延迟标记写错了。标记到了叶子节点上。。。。这根本就没延迟嘛。。。怪不得一直TLE。。。 这题就是利用二进制来标记颜色的种类。然后利用或|这个符号来统计每个区间不同颜色种数。 代码如下: #include #include #include #include #include #include #include #include #incl

scf0920 1170

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【POJ 2777】 Count Color(线段树区间更新与查询)

【POJ 2777】 Count Color(线段树区间更新与查询) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40949   Accepted: 12366 Description Chosen Problem Solving and Program d

ACMer' 1347

【题解】Count Color POJ - 2777 (线段树 区间染色)⭐⭐⭐

Count Color POJ - 2777 Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. There is a very long board with le...

Suprit's blog 803

poj 2777 Count Color 线段树

题目大意:有一段长为L(1 C A B C ——将区间[A, B]涂为颜色C P A B —— 查询区间[A, B]间有多少种颜色 PS:初始时木板颜色为1;A不一定小于B。做题时需注意这两个地方。 解题思路: 首先,这是个更新区间,查询区间的问题,很容易想到要用线段树。那么接下来的工作就是线段树中需要哪些数据域来解决这个问题呢?一共有30种颜料,不多,但也不能每个节点开个数组

暮雨潇湘 1427

POJ2777 Count Color【线段树 区间覆盖】

Count Color http://poj.org/problem?id=2777 Time Limit:1000MS Memory Limit:65536K Total Submissions:54255 Accepted:16304 Description Chosen Problem Solving and Program design...

逐梦者 396

[poj2777 Count Color]线段树

Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 36607   Accepted: 11047 Description Chosen Problem Solving and Program design as an optional course

When you go away 1392

poj 2777 Count Color(线段树区区+染色问题)

题目链接:  poj 2777 Count Color 题目大意:  给出一块长度为n的板,区间范围[1,n],和m种染料                     k次操作,C  a  b  c 把区间[a,b]涂为c色,P  a  b 查询区间[a,b]有多少种不同颜色 解题思路:  很明显的线段树的区间插入和区间查询,但是如何统计有多少不同的颜色呢?

ンZee的解题报告 2195

POJ2777 Count Color 线段树

题意: 给一个固定长度为L的画板 有两个操作: C A B C:区间AB内涂上颜色C。 P A B:查询区间AB内颜色种类数。 思路: 首先显然是要线段树。 每个节点有如下参数: l,r 表示区间。 int color表示颜色,对于颜色要用位运算。 刚开始我的做法是对于每个C操作,就更新区间为AB的节点及其所有子节点。 然后TLE了。 其实本质原因是

Aszxqw 3009

POJ 2777 Count Color(线段树+位运算)

POJ 2777 Count Color(线段树+位运算)

2888

POJ 2777 Count Color(线段树区间修改+位运算)

题目链接:点击打开链接 题意:两种操作, 一个是区间修改, 一个是区间查询颜色种类数。 该题因为要不断的求某个区间的颜色种类数, 我们可以用位运算的并来实现。 其他的就是线段树区间修改的经典操作了。 细节参见代码: #include #include #include #include #include #include #include #include #include #inclu

AC_Arthur的专栏 1627

线段树(hdu3308LCIS、poj2777Count Color

hdu3308 LCIS Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10830 Accepted Submission(s): 4632 Problem Description Given n integers. You have two operations: U A B: replace the Ath number by B. (

yxrzibinanhai的博客 296

POJ 2777 Count Color(线段树,区间修改)

线段树,区间修改 网上老哥思路: 线段树节点存储该区间内的颜色,单点区间肯定就是染成的颜色,大区间如果标记为-1则表示该区间由多种颜色的小区间组成, 注意初始情况下木板均为同一种颜色,可以记为1。一共有最多30种颜色,所以用bool vis[30]数组标记,在每次查询的时候清空, 查询到点或区间颜色相同时,对该颜色标记为true,最后统计1~T这T种颜色使用的个数即vis是true的情况 本题要点: 1、节点维护的信息: 区间范围: [l, r] 区间的颜色: color 延迟标记: flag 2、 套用线

qq_38232157的博客 225

poj2777 Count Color

Count Color Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26254   Accepted: 7833 Description Chosen Problem Solving and Program design as an optional c

喵呜的Blog 976
上一篇: 树状数组、线段树模板(一)——单点更新 + HDU 1166 敌兵布阵
下一篇: POJ 3067 Japan(树状数组求逆序对)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值