题意:有一个黑板上贴海报。给出每一个海报在黑板上的覆盖区间为l r,问最后多少个海报是可见的。

题解:由于l r取值到1e7,肯定是要离散化的,但普通的离散化会出问题。比方[1,10],[1,4],[6,10]普通得到答案是2,但事实上是3。改进的离散化方法假设两个数字相差大于1,就在中间补一个数字。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 10005;
int n, l[N], r[N], a[N << 3], tree[N << 4], vis[N], res; void pushdown(int k) {
if (tree[k] != -1) {
tree[k * 2] = tree[k * 2 + 1] = tree[k];
tree[k] = -1;
}
} void modify(int k, int left, int right, int l1, int r1, int x) {
if (l1 <= left && right <= r1) {
tree[k] = x;
return;
}
pushdown(k);
int mid = (left + right) / 2;
if (mid >= l1)
modify(k * 2, left, mid, l1, r1, x);
if (mid < r1)
modify(k * 2 + 1, mid + 1, right, l1, r1, x);
} void query(int k, int left, int right) {
if (left == right) {
if (!vis[tree[k]]) {
res++;
vis[tree[k]] = 1;
}
return;
}
pushdown(k);
int mid = (left + right) / 2;
query(k * 2, left, mid);
query(k * 2 + 1, mid + 1, right);
} int main() {
int t;
scanf ("%d", &t);
while (t--) {
memset(tree, -1, sizeof(tree));
memset(vis, 0, sizeof(vis));
int cnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf ("%d%d", &l[i], &r[i]);
a[++cnt] = l[i];
a[++cnt] = r[i];
}
sort(a + 1, a + 1 + cnt);
cnt = unique(a + 1, a + 1 + cnt) - (a + 1);
int cnt2 = cnt;
for (int i = 2; i <= cnt; i++)
if (a[i] - a[i - 1] > 1)
a[++cnt2] = a[i] - 1;
cnt = cnt2;
sort(a + 1, a + 1 + cnt);
for (int i = 1; i <= n; i++) {
int l1 = lower_bound(a + 1, a + 1 + cnt, l[i]) - a;
int r1 = lower_bound(a + 1, a + 1 + cnt, r[i]) - a;
modify(1, 1, cnt, l1, r1, i);
}
res = 0;
query(1, 1, cnt);
printf("%d\n", res);
}
return 0;
}

poj 2528(区间改动+离散化)的更多相关文章

  1. POJ 2528 区间染色,求染色数目,离散化

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 47905   Accepted: 13903 ...

  2. POJ - 2528 区间离散化,线段树区间修改,区间询问

    这个题非常有意思的地方是,我们发现区间[1,4]和[5,8]是紧挨着的,因为这个的数代表的是一段区间,原本我们对于普通的离散, a[1]=1,a[2]=5,a[3]=6,a[4]=8;数组下标就是重新 ...

  3. poj 2528(线段树+离散化) 市长的海报

    http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...

  4. POJ 2528 (线段树 离散化) Mayor's posters

    离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...

  5. poj 2528 线段树 离散化的小技巧

    题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:直接搞超时+超内存,需要离散化.离散化简单的来说就是只取我们需要的值来 用,比如说区间[1000,2000],[1990,2012] ...

  6. Mayor's posters POJ - 2528(线段树 + 离散化)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74745   Accepted: 21574 ...

  7. zoj 3299(区间改动+离散化)

    题意:有n个由小木块组成的长条木块要掉下来.给出木块的左右区间,然后有给了m个木板的左右区间和高度用来接住木块,由于木块是由小木块接触组成的,也就是木板能够接住一部分的木块.剩下的会继续掉落,问最后每 ...

  8. poj 2528 线段树+离散化

    题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报.求最后能看到多少张海报 sol:线段树成段更新.铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i. 然而坐标 ...

  9. hiho1079 线段树区间改动离散化

    题目链接: hihocoder1079 代码: #include<iostream> #include<cstdio> #include<cstring> #inc ...

随机推荐

  1. Asp.net HttpWebRequest和HttpWebResponse发送和接受任何类型数据

    发送字符串数据发送数据 string strId = "guest"; "; string postData = "userid=" + strId; ...

  2. Java学习ing

    ConcurrentHashMap从JDK1.5开始随java.util.concurrent包一起引入JDK中,主要为了解决HashMap线程不安全和Hashtable效率不高的问题. Concur ...

  3. [译]__main__ 顶级脚本环境

    'main'是其中顶级代码执行的范围的名称.一个模块的__name__可以从标准输入,脚本,或从一个交互式命令行中等方式被设置成等于'main'. 一个模块可以发现它是否是通过检查自身在主运行范围__ ...

  4. C#发送邮件异常,返回信息乱码

    发邮件时出现了异常: 在 System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response) 在 ...

  5. 【bzoj4319】cerc2008 Suffix reconstruction 贪心

    题目描述 话说练习后缀数组时,小C 刷遍 poj 后缀数组题, 各类字符串题闻之丧胆.就在准备对敌方武将发出连环杀时,对方一记无中生有,又一招顺手牵羊,小C 程序中的原字符数组就被牵走了.幸运的是,小 ...

  6. BZOJ3555 [Ctsc2014]企鹅QQ 【hash】

    题目 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验, ...

  7. 第一个 XMLHttpRequest 例子(API)

    [API] https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest [替代方案] 如果不想自己敲代码,可以直接访问以下URL测试 ...

  8. bzoj 5056: OI游戏 最短路树的计数

    OI游戏 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 196  Solved: 159[Submit][Status][Discuss] Descrip ...

  9. spring中MessageSource的配置使用方法3--ResourceBundleMessageSource

    ApplicationContext接口扩展了MessageSource接口,因而提供了消息处理的功能(i18n或者国际化).与HierarchicalMessageSource一起使用,它还能够处理 ...

  10. JSR310 时间类型的相互转换

    参数申明: final Date date = new Date(); final Timestamp timestamp = new Timestamp(date.getTime()); final ...