poj2528(线段树区间替换&离散化)
题目链接: http://poj.org/problem?id=2528
题意: 第一行输入一个 t 表 t 组输入, 对于每组输入: 第一行 n 表接下来有 n 行形如 l, r 的输入, 表在区间 [l, r] 贴一张海报, 问最终能看见几张不同的海报;
思路: 线段树区间替换, 每次 update 时都会给对应区间加一个 lazy 标记, 最终统计标记的种数即为答案;
注意: 题目给出的 l, r 很大, 需要离散化, 和普通的离散化不同, 因为本题中每个单位是代表长度为一的一个区间,而非一个点, 所以对于两个数 a, b, 若 b > a + 1,
hash[a] = cnt, 那么hash[b] = cnt + 2 而非 hahs[b] = cnt + 1;不然对于一些数据会出错.
代码:
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- #include <string.h>
- #include <map>
- #define lson l, mid, rt << 1
- #define rson mid + 1, r, rt << 1 | 1
- using namespace std;
- const int MAXN = 1e4 + ;
- int l[MAXN], r[MAXN], gel[MAXN << ], lazy[MAXN << ];
- bool vis[MAXN << ];
- map<int, int> hash;
- int ans;
- void push_down(int rt){//将当前标记向下一层更新
- if(lazy[rt] != -){
- lazy[rt << ] = lazy[rt << | ] = lazy[rt];
- lazy[rt] = -;
- }
- }
- void update(int L, int R, int x, int l, int r, int rt){//区间替换
- if(L <= l && R >= r){
- lazy[rt] = x;
- return;
- }
- push_down(rt);
- int mid = (l + r) >> ;
- if(L <= mid) update(L, R, x, lson);
- if(R > mid) update(L, R, x, rson);
- }
- void query(int l, int r, int rt){
- if(lazy[rt] != -){//标记的种数即为答案
- if(!vis[lazy[rt]]){
- ans++;
- vis[lazy[rt]] = true;
- }
- return;
- }
- if(l == r) return;
- int mid = (l + r) >> ;
- query(lson);
- query(rson);
- }
- int main(void){
- int t, n;
- scanf("%d", &t);
- while(t--){
- int indx = , cnt = ;
- scanf("%d", &n);
- for(int i = ; i < n; i++){
- scanf("%d%d", &l[i], &r[i]);
- gel[indx++] = l[i];
- gel[indx++] = r[i];
- }
- sort(gel, gel + indx);
- hash[gel[]] = cnt;
- for(int i = ; i < indx; i++){ //hash
- if(gel[i] > gel[i - ] + ){
- cnt += ;
- hash[gel[i]] = cnt;
- }else if(gel[i] > gel[i - ]){
- cnt += ;
- hash[gel[i]] = cnt;
- }
- }
- memset(lazy, -, sizeof(lazy));
- memset(vis, false, sizeof(vis));
- for(int i = ; i < n; i++){
- update(hash[l[i]], hash[r[i]], i, , cnt, );
- }
- ans = ;
- query(, cnt, );
- printf("%d\n", ans);
- }
- return ;
- }
poj2528(线段树区间替换&离散化)的更多相关文章
- POJ-2528 Mayor's posters (线段树区间更新+离散化)
题目分析:线段树区间更新+离散化 代码如下: # include<iostream> # include<cstdio> # include<queue> # in ...
- HDU 1698 Just a Hook(线段树 区间替换)
Just a Hook [题目链接]Just a Hook [题目类型]线段树 区间替换 &题解: 线段树 区间替换 和区间求和 模板题 只不过不需要查询 题里只问了全部区间的和,所以seg[ ...
- HDU.1689 Just a Hook (线段树 区间替换 区间总和)
HDU.1689 Just a Hook (线段树 区间替换 区间总和) 题意分析 一开始叶子节点均为1,操作为将[L,R]区间全部替换成C,求总区间[1,N]和 线段树维护区间和 . 建树的时候初始 ...
- hdu1698(线段树区间替换模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...
- POJ2528:Mayor's posters(线段树区间更新+离散化)
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...
- POJ-2528 Mayor's posters(线段树区间更新+离散化)
http://poj.org/problem?id=2528 https://www.luogu.org/problem/UVA10587 Description The citizens of By ...
- POJ 2528 Mayor's posters (线段树区间更新+离散化)
题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- POJ 2528——Mayor's posters——————【线段树区间替换、找存在的不同区间】
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
随机推荐
- linux rsyncserver文件同步
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zqtsx/article/details/24254651 [root@zqtsx]# rpm -q ...
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
参考: 1,使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)http://blog.csdn.net/xdwyyan/article/details/4319 ...
- Quartz Job scheduling 基础实现代码
Quartz 集成在 SpringBoot 中分为 config.task.utils.controller 和 MVC 的三层即 controller.service.dao 和 entity. c ...
- linux下安装https证书
https://www.aliyun.com/jiaocheng/165422.html
- hihocoder #1040 矩形判断(计算几何问题 给8个点的坐标,能否成为一个矩形 【模板思路】)
#1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...
- .net 常用的插件列表
1,.net 分布式Session 解决方案RedisSessionStateProvider 2,c# 表达式树查看工具 Expression Tree Visualizer 3,sqlbuilde ...
- MySQL Unable to convert MySQL date/time value to System.DateTime的解决办法
在连接串中加入 Convert Zero Datetime=True
- Sturs2 -概念讲解 第一弹
源码下载地址:http://struts.apache.org/ struts-2.5.14.1-all.zip --所有内容 struts-2.5.14.1-apps.zip --实例的应用 st ...
- DBA日记:一次reboot导致的严重失误
昨天下午,一现场要添加RAC节点,db1节点正常运行,添加db2节点:在db2上做了安装的一些配置后,需要reboot, 于是直接就reboot:糟糕,这条命令错误地执行在db1上了,导致现场数据库直 ...
- hdu 6121 Build a tree
/** * 题意:一棵 n 个点的完全 k 叉树,结点标号从 0 到 n - 1,求以每一棵子树的大小的异或和. * 解法:k叉树,当k=1时,特判,用xorn函数,具体解释:http://blog. ...