HDU-5023 线段树染色问题+延时标记

题意

给我们1-n的区间段 两种操作
P a b c 表示把a到b染成c颜色
Q a b 表示求a到b的颜色种类数量
注意初始全部先染成颜色2

分析

线段树经典染色问题
可以用二进制来表示颜色数量 一共30个颜色 那么最多也就是30位 不会超过int的范围 二进制下第x位为1表示有x+1的颜色
父节点可以用”|”运算来统计两个子节点的信息

CODE

#include<bits/stdc++.h>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
typedef long long ll;
const int maxn = 1000010;
struct tree{int color,tag;//延时标记
}T[maxn<<2];
void build(int l,int r,int rt)
{T[rt].tag=0;//注意这里要初始化树中的每个点都要初始化成0 才不会出错if(l==r){T[rt].color=2;return;}int mid = (l+r)>>1;build(lson);build(rson);T[rt].color = T[rt<<1].color | T[rt<<1|1].color;
}
void push_down(int l,int r,int rt){if(T[rt].tag){T[rt<<1].color = T[rt<<1|1].color = T[rt].tag;T[rt<<1].tag = T[rt<<1|1].tag = T[rt].tag;T[rt].tag=0;}
}
void update(int s,int e,int cor,int l,int r,int rt){if(s<=l&&e>=r){T[rt].color = 1<<(cor-1);T[rt].tag = 1<<(cor-1);return;}push_down(l,r,rt);int mid = (l+r)>>1;if(s<=mid)update(s,e,cor,lson);if(e>=mid+1)update(s,e,cor,rson);T[rt].color = T[rt<<1].color|T[rt<<1|1].color;
}
int query(int s,int e,int l,int r,int rt){if(s<=l&&e>=r)return T[rt].color;push_down(l,r,rt);int mid = l+r>>1;int ans=0;if(s<=mid)ans|=query(s,e,lson);if(e>=mid+1)ans|=query(s,e,rson);return ans;
}
int main()
{int n,m;while(scanf("%d%d",&n,&m)){if(n==0&&m==0)return 0;char cc[3];build(1,n,1);while(m--){int a,b,c;scanf(" %s",cc);if(cc[0]=='P'){scanf("%d%d%d",&a,&b,&c);update(a,b,c,1,n,1);}else{scanf("%d%d",&a,&b);int ans = query(a,b,1,n,1);bool f=0;while(ans){if(ans&1){if(f)printf(" %d",cnt);else printf("%d",cnt),f=1;}cnt++;ans>>=1;}puts("");}}}return 0;
}

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

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

相关文章

频率域锐化滤波器

频率域锐化滤波器 &#xff08;Frequency Sharpening Filters &#xff09; 图像的边缘、细节主要位于高频部分&#xff0c;而图 像的模糊是由于高频成分比较弱产生的。 频率域锐化就是为了消除模糊&#xff0c;突出边缘。 采用高通滤波器让高频成分通过&#xff0c;使低频成 …

1033 旧键盘打字

旧键盘上坏了几个键&#xff0c;于是在敲一段文字的时候&#xff0c;对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键&#xff0c;打出的结果文字会是怎样&#xff1f; 输入格式&#xff1a; 输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中…

Node js redis

const redis require(redis);//redis const client redis.createClient(8888, 172.16.4.2); //redis操作client.set("hello", "{\"a\":\"1\", \"b\":\"2\"}") client.get("hello", function(err, val…

6用NetBeans进行JSP开发

用NetBeans进行JSP开发 NetBeans

关于GCD的证明

关于GCD欧几里得算法的证明过程&#xff1a; 证明一&#xff1a; 有两个数 a b 设这两个数的gcd(a,b) g 那么假设其中比较大的数 a a k*b r; 那么当我们对a求对b的最大公约数时 如果没有余数r 那么gcd 就等于b 那么现在有r了 所以gcd 的取值就取决于r了 因为现在我们…

Java学习笔记12——JVM入门

文章目录JVM简介和体系结构JVM的位置JVM的体系结构类加载器双亲委派机制沙箱安全机制&#xff08;了解即可&#xff09;NativePC寄存器方法区栈三种JVM堆新生区永久区堆内存调优Jprofiler的使用GC&#xff08;垃圾回收&#xff09;引用计数法复制算法标记清除法标记压缩法GC算法…

[Leedcode][JAVA][第125题][验证回文串][双指针][String]

【问题描述】[简单] 给定一个字符串&#xff0c;验证它是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。说明&#xff1a;本题中&#xff0c;我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama" 输…

面向对象之:继承

一&#xff1a;什么面向对象的继承&#xff1f; 比较官方的说法就是&#xff1a; 继承&#xff08;英语&#xff1a;inheritance&#xff09;是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B&#xff0c;就把这个A称为“B的子类别”&#xff0c;而…

7用Eclipse进行JSP开发

用Eclipse进行JSP开发 Eclipse简介和下载 Eclipse的发展 什么是Eclipse Eclipse下载 用Eclipse进行JSP开发 软件环境配置 安装JDK&#xff0c;配置Java运行环境 安装Tomcat服务器&#xff08;服务器能够正常启动和关闭&#xff09; 安装Eclipse JSP开发

求递归算法时间复杂度:递归树

引用自&#xff1a;http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html 递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还…

[Leetcode][JAVA]第[29]题[两数相除][二分法]

【问题描述】[中等] 给定两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去&#xff08;truncate&#xff09;其小数部分&#xff0c;…

8.用MyEclipse进行JSP开发

用MyEclipse进行JSP开发

Hihocoer 1336 - Matrix Sum 二维树状数组

题意 给我们个n*n的矩阵 有m个操作让我们 操作有两种 Add x y v对(x,y)上的元素加v Sum x1 y1 x2 y2 对(x1,y1)为左上角(x2,y2)为右下角的矩阵求和并mod 1e97 初始矩阵每个元素都是0 1 ≤ N ≤ 1000, 1 ≤ M ≤ 100000 For each Add operation: 0 ≤ x < N, 0 ≤ y < N…

Java学习笔记13-1——SpringMVC

文章目录1.什么是MVC回顾Servlet2.什么是SpringMVC概述中心控制器SpringMVC执行原理3.第一个SpringMVC 程序使用XML配置实现使用注解实现4.控制器和RestFul风格控制器Controller实现Controller接口使用注解ControllerRequestMappingRestFul 风格扩展&#xff1a;小黄鸭调试法5.…

端口占用怎么查找

D:\Users\hp\Documents\NetBeansProjects\WebApplication1\nbproject\build-impl.xml:1030: Deployment error: Starting of Tomcat failed, the server port 8080 is already in use. netstat -aon|findstr "8080" 查看端口 查看端口的进程 记住3306 tasklist|fi…

数据库相关

https://blog.csdn.net/qq_35246620/article/details/70823903 瞻仰大佬的博客,,学习学习 转载于:https://www.cnblogs.com/wangxiaoshou/p/10483428.html

eclipse没有server怎么办

1打开eclipse 找到help 2点开&#xff0c;查找 Install new software 二步、然后在Work with中点击Add&#xff0c;如下图所示&#xff0c;加入Name"Kepler" repository&#xff1b;Locationhttp://download.eclipse.org/releases/kepler。 3填写完成后使用add 4第…

HDU - 5441 Travel 离线处理+并查集

题意 给我们一个图 给出这个图的n个点 和m个边和权值 然后再分别给我们q个查询 每个查询给一个x 让我们在这个图中找出多少个不同的有序对 使得从x到y的最大权值不超过x n≤20000,m≤100000,q≤5000. 分析 20000个点 1000ms 暴力肯定不行 看似这道题像是个图论的题 嘿嘿嘿 其…

zabbix利用SNMPTrap接收交换机主动告警

zabbix接收trap的工作流程&#xff1a; snmptrapd 收到trapsnmptrapd将trap传递给SNMPTT或调用Perl接收器SNMPTT或Perl trap接收器解析&#xff0c;格式化并将trap写入文件Zabbix SNMP trap读取并解析trap文件对于每个trap&#xff0c;Zabbix发现主机接口与接收的trap地址匹配的…

eclipse安装jsp

1打开window中preferences 2找到server下runningtime 3add 4选择 5加入 6找到 7建立一个新jsp文件