ZOJ 1606 Count the Colors (线段数染色)
题目大意:
给你一段长度为 8000 的绳子,n 次操作,每次将[ l r ]区间染色为 c ,染色会覆盖掉之前的染色,所有数字不超过8000,统计最后的颜色和出现的不连续区间的个数。按颜色顺序输出。
题解思路:
线段数区间染色,因为是区间染色,所以在每个2点之间又加了一个点来代表此区间的颜色。
最后统计区间个数用一个last标记一下上次的颜色即可,注意如果颜色断掉last要初始一下。
(这个数据范围,暴力不好吗)
几个样例
2
1 2 1
3 4 1
3
1 10 0
1 4 1
5 10 2
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<stack>const int maxn=16005;using namespace std;int col[4*maxn],n,cnt[maxn],last;void built(int l,int r,int now)//初始化
{int mid=(l+r)/2;col[now]=-1;if(l==r) return ;built(l,mid,now*2);built(mid+1,r,now*2+1);
}void updata(int l,int r,int left,int right, int c,int now)
{int mid=(l+r)/2;if(left<=l&&r<=right){col[now]=c;return ;}if(l==r) return ;if(col[now]!=-1)//向下传递{col[now*2]=col[now*2+1]=col[now];col[now]=-1;}if(left<=mid) updata(l,mid,left,right,c,now*2);if(right>mid) updata(mid+1,r,left,right,c,now*2+1);
}void query(int l,int r,int now)
{int mid=(l+r)/2;if(col[now]!=-1){if(col[now]!=last){cnt[col[now]]++;last=col[now];}return ;}if(l==r) {last=-1;return ;}//如果到了叶子节点且没有颜色,表示颜色断掉query(l,mid,now*2);query(mid+1,r,now*2+1);
}int main(){while(~scanf("%d",&n)){built(0,16000,1);for(int i=1;i<=n;i++){int l,r,k;scanf("%d%d%d",&l,&r,&k);updata(0,16000,2*l,2*r,k,1);//区间加点,直接*2处理了}last=-1;memset(cnt,0,sizeof(cnt));query(0,16000,1);for(int i=0;i<=8000;i++){if(cnt[i]!=0){printf("%d %d\n",i,cnt[i]);}}printf("\n");}return 0;
}
转载于:https://www.cnblogs.com/minun/p/10473773.html
ZOJ 1606 Count the Colors (线段数染色)相关推荐
- ZOJ 1610 Count the Colors
段树:延迟标志+暴力更新 我记得刚学段树做的时候这个话题WA一个版本.....如今,每分钟获得.... Count the Colors Time Limit: 2 Seconds Memo ...
- ZOJ 1610 Count the Colors 【线段树】
<题目链接> 题目大意: 在[0,8000]这个区间内,不断进行一些操作,将其中的一些区间染成特定颜色,如果区间重复的话,后面染的色块会覆盖前面染的色块,问最终[0,8000]这个区间内每 ...
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
- hdu 5023 线段树染色问题
题目链接 A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/1 ...
- Count Color poj2777 线段树
Count Color poj2777 线段树 题意 有一个长木板,现在往上面在一定区间内刷颜色,后来刷的颜色会掩盖掉前面刷的颜色,问每次一定区间内可以看到多少种颜色. 解题思路 这里使用线段树,因为 ...
- [TJOI2011] 书架(线段数优化dp + 单调栈)
problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移. 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值. 然后枚举最后一组,即 i ...
- mongodb count查询记录条数
2019独角兽企业重金招聘Python工程师标准>>> count查询记录条数 使用count()方法查询表中的记录条数,例如,下面的命令查询表users的记录数量: db.user ...
- 线段数单点更新——HDU 2795
对应HDU题目:点击打开链接 Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- Codeforces 444C DZY Loves Colors 线段树区间更新
// Codeforces 444C DZY Loves Colors 线段树区间更新// 题目链接:// http://codeforces.com/problemset/problem/444/C ...
- Count the Colors ZOJ - 1610
GO 题意:给一个区间,有n次染色操作,每次将[x1, x2]染为c,求最后每种颜色各有多少线段可以看到. #include<cstdio> #include<iostream> ...
最新文章
- 【LorMe云讲堂】蔡枫:真菌的耐盐机制
- 美妙的Python又来了
- 2020年总结以及21年规划
- nginx linux脚本,shell脚本之nginx自动化脚本
- linux rm 删除所有文件,linux无需rm就可快速删除大量文件
- tomcat java 参数乱码_javaweb乱码(tomcat服务器)
- P1135 奇怪的电梯(BFS/DFS)
- BufferedInputStream
- 编写业务层和持久层事务控制代码并配置spring的ioc
- C++的高效从何而来
- mybatis.xml文件
- JDBC分页查询及实现
- GAN论文阅读路线图,更快地通过大量阅读入门GAN
- HDU 2588 GCD
- 共轭梯度法(Conjugate Gradient)
- SPSS 产生正交数据集
- leetcode 1800. Maximum Ascending Subarray Sum(python)
- JavaScript -- Map数据结构
- 使用Ngrok实现内网穿透|附国内免费服务器
- javaweb基于SSM框架的书籍小说在线阅读下载网站
热门文章
- 8个让DevOps转型取得成功的关键步骤
- HTML+CSS 模仿Windows 7 桌面效果
- 转载:如果你到了20岁,还没到 25岁 作者:李开复
- 招生网上报名程序090512.rar
- STM32标准库官网下载方法
- HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)...
- 常用的python模块及安装方法
- fullCalendar:中文API
- 栈、堆、静态存储区的三分天下
- 【追寻javascript高手之路05】理解事件流