ZOJ1610——Count the Colors
来源:互联网 发布:生态监测网络建设方案 编辑:程序博客网 时间:2024/06/06 19:54
Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones.
Your task is counting the segments of different colors you can see at last.
Input
The first line of each data set contains exactly one integer n, 1 <= n <= 8000, equal to the number of colored segments.
Each of the following n lines consists of exactly 3 nonnegative integers separated by single spaces:
x1 x2 c
x1 and x2 indicate the left endpoint and right endpoint of the segment, c indicates the color of the segment.
All the numbers are in the range [0, 8000], and they are all integers.
Input may contain several data set, process to the end of file.
Output
Each line of the output should contain a color index that can be seen from the top, following the count of the segments of this color, they should be printed according to the color index.
If some color can't be seen, you shouldn't print it.
Print a blank line after every dataset.
Sample Input
5
0 4 4
0 3 1
3 4 2
0 2 2
0 2 3
4
0 1 1
3 4 1
1 3 2
1 3 1
6
0 1 0
1 2 1
2 3 1
1 2 0
2 3 0
1 2 1
Sample Output
1 1
2 1
3 1
1 1
0 2
1 1
Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones.
Your task is counting the segments of different colors you can see at last.
Input
The first line of each data set contains exactly one integer n, 1 <= n <= 8000, equal to the number of colored segments.
Each of the following n lines consists of exactly 3 nonnegative integers separated by single spaces:
x1 x2 c
x1 and x2 indicate the left endpoint and right endpoint of the segment, c indicates the color of the segment.
All the numbers are in the range [0, 8000], and they are all integers.
Input may contain several data set, process to the end of file.
Output
Each line of the output should contain a color index that can be seen from the top, following the count of the segments of this color, they should be printed according to the color index.
If some color can't be seen, you shouldn't print it.
Print a blank line after every dataset.
Sample Input
5
0 4 4
0 3 1
3 4 2
0 2 2
0 2 3
4
0 1 1
3 4 1
1 3 2
1 3 1
6
0 1 0
1 2 1
2 3 1
1 2 0
2 3 0
1 2 1
Sample Output
1 1
2 1
3 1
1 1
0 2
1 1
水题线段树
#include <map>#include <set>#include <list>#include <queue>#include <stack>#include <vector>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 8010;int cnt[N], ret;struct node{int l, r;int col;}tree[N << 2], seg[N], rec[N];void build (int p, int l, int r){tree[p].l = l;tree[p].r = r;tree[p].col = -1;if (l == r){return;}int mid = (l + r) >> 1;build(p << 1, l, mid);build(p << 1 | 1, mid + 1, r);}void update(int p, int l, int r, int col){if (tree[p].l >= l && r >= tree[p].r){tree[p].col = col;return;}if (tree[p].col != -1){tree[p << 1].col = tree[p].col;tree[p << 1 | 1].col = tree[p].col;tree[p].col = -1;}int mid = (tree[p].l + tree[p].r) >> 1;if (r <= mid){update(p << 1, l, r, col);}else if (l > mid){update(p << 1 | 1, l, r, col);}else{update(p << 1, l, mid, col);update(p << 1 | 1, mid + 1, r, col);}}void query (int p){if (tree[p].col != -1){rec[ret].l = tree[p].l;rec[ret].r = tree[p].r;rec[ret++].col = tree[p].col;return;}query(p << 1);query(p << 1 | 1);}int main(){int n, l, r;while(~scanf("%d", &n)){l = 10000, r = -10000;memset (cnt, 0, sizeof(cnt));for (int i = 0; i < n; ++i){scanf("%d%d%d", &seg[i].l, &seg[i].r, &seg[i].col);l = min(l, seg[i].l);r = max(r, seg[i].r);}build(1, l + 1, r);ret = 0;for (int i = 0; i < n; ++i){update(1, seg[i].l + 1, seg[i].r, seg[i].col);}query(1);cnt[rec[0].col]++;for (int i = 1; i < ret; ++i){if (rec[i].col != rec[i - 1].col){cnt[rec[i].col]++;}else if (rec[i].l > rec[i - 1].r + 1){cnt[rec[i].col]++;}}for (int i = 0; i <= 8000; ++i){if (cnt[i] != 0){printf("%d %d\n", i, cnt[i]);}}printf("\n");}return 0;}
- ZOJ1610——Count the Colors
- zoj1610——Count the Colors
- ZOJ1610-Count the Colors
- zoj1610-Count the Colors
- ZOJ1610 Count the Colors
- ZOJ1610-Count the Colors
- zoj1610:count the colors
- 线段树专题—ZOJ1610 Count the Colors
- ZOJ1610 Count the Colors,线段树
- [Virtual Judge]ZOJ1610:Count the Colors
- zoj1610 Count the Colors(线段树)
- 线段树之ZOJ1610 Count the Colors
- zoj1610( 线段树)(Count the Colors)
- zoj1610 Count the Colors(线段树)
- ZOJ1610 Count the Colors(线段树+思路)
- ZOJ1610 Count the Colors 经典线段树染色问题
- ZOJ1610 Count the Colors(线段树区间更新)
- ZOJ1610 Count the Colors(线段树区间染色,成段更新)
- Error encountered during installing R in Ubuntu
- Yahoo军规——网站性能优化
- 计算机视觉与模式识别代码合集第二版three
- 九度1497:面积最大的全1子矩阵
- Untiy3d-c#搞定函数之delegate,event, lambda,Func,Action
- ZOJ1610——Count the Colors
- vs2013环境下编译SDL2.0
- requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
- Maven的安装、配置及使用
- 【函数】复数计算
- SEO——网站搜索引擎优化
- Ruby on Rails微信开发1——开发模式的启用与接口配置
- JVM-运行时数据区
- 各种各样的输入输出挂 mmdns~