题目大意:

给你一段长度为 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 (线段数染色)相关推荐

  1. ZOJ 1610 Count the Colors

    段树:延迟标志+暴力更新 我记得刚学段树做的时候这个话题WA一个版本.....如今,每分钟获得.... Count the Colors Time Limit: 2 Seconds      Memo ...

  2. ZOJ 1610 Count the Colors 【线段树】

    <题目链接> 题目大意: 在[0,8000]这个区间内,不断进行一些操作,将其中的一些区间染成特定颜色,如果区间重复的话,后面染的色块会覆盖前面染的色块,问最终[0,8000]这个区间内每 ...

  3. ZOJ 1610 Count the Colors (线段树区间更新)

    题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...

  4. hdu 5023 线段树染色问题

    题目链接 A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/1 ...

  5. Count Color poj2777 线段树

    Count Color poj2777 线段树 题意 有一个长木板,现在往上面在一定区间内刷颜色,后来刷的颜色会掩盖掉前面刷的颜色,问每次一定区间内可以看到多少种颜色. 解题思路 这里使用线段树,因为 ...

  6. [TJOI2011] 书架(线段数优化dp + 单调栈)

    problem luogu-P1295 首先可以列出一个暴力 dpdpdp 转移. 设 f(i):f(i):f(i): 到 iii 为止划分若干组,每组最大值的和 的最小值. 然后枚举最后一组,即 i ...

  7. mongodb count查询记录条数

    2019独角兽企业重金招聘Python工程师标准>>> count查询记录条数 使用count()方法查询表中的记录条数,例如,下面的命令查询表users的记录数量: db.user ...

  8. 线段数单点更新——HDU 2795

    对应HDU题目:点击打开链接 Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  9. Codeforces 444C DZY Loves Colors 线段树区间更新

    // Codeforces 444C DZY Loves Colors 线段树区间更新// 题目链接:// http://codeforces.com/problemset/problem/444/C ...

  10. Count the Colors ZOJ - 1610

    GO 题意:给一个区间,有n次染色操作,每次将[x1, x2]染为c,求最后每种颜色各有多少线段可以看到. #include<cstdio> #include<iostream> ...

最新文章

  1. 【LorMe云讲堂】蔡枫:真菌的耐盐机制
  2. 美妙的Python又来了
  3. 2020年总结以及21年规划
  4. nginx linux脚本,shell脚本之nginx自动化脚本
  5. linux rm 删除所有文件,linux无需rm就可快速删除大量文件
  6. tomcat java 参数乱码_javaweb乱码(tomcat服务器)
  7. P1135 奇怪的电梯(BFS/DFS)
  8. BufferedInputStream
  9. 编写业务层和持久层事务控制代码并配置spring的ioc
  10. C++的高效从何而来
  11. mybatis.xml文件
  12. JDBC分页查询及实现
  13. GAN论文阅读路线图,更快地通过大量阅读入门GAN
  14. HDU 2588 GCD
  15. 共轭梯度法(Conjugate Gradient)
  16. SPSS 产生正交数据集
  17. leetcode 1800. Maximum Ascending Subarray Sum(python)
  18. JavaScript -- Map数据结构
  19. 使用Ngrok实现内网穿透|附国内免费服务器
  20. javaweb基于SSM框架的书籍小说在线阅读下载网站

热门文章

  1. 8个让DevOps转型取得成功的关键步骤
  2. HTML+CSS 模仿Windows 7 桌面效果
  3. 转载:如果你到了20岁,还没到 25岁 作者:李开复
  4. 招生网上报名程序090512.rar
  5. STM32标准库官网下载方法
  6. HtmlCleaner CleanerProperties 参数配置(转自macken博客,链接:http://macken.iteye.com/blog/1579809)...
  7. 常用的python模块及安装方法
  8. fullCalendar:中文API
  9. 栈、堆、静态存储区的三分天下
  10. 【追寻javascript高手之路05】理解事件流