poj 2528

For each input data set print the number of visible posters after all the posters are placed.

The picture below illustrates the case of the sample input. 

Sample Input

1
5
1 4
2 6
8 10
3 4
7 10

Sample Output

4

题意:贴报纸,可以互相覆盖,求最后能看见多少。

数据很大,不离散会超出内存。将浪费的部分去掉,将出现过的所有点其映射到相距更近的点上。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
#define N 100005
#define mod 258280327
#define MIN 0
#define MAX 1000001 int l[N],r[N];
int x[N];
int has[10000005]; struct node
{
int le,re;
bool covered;
} pnode[10*N]; void build(int i,int l,int r)
{
pnode[i].le = l;
pnode[i].re = r;
pnode[i].covered = false;
if(l == r)
return; build(2 * i,l,(l+r)/2);
build(2*i+1,(l+r)/2+1,r);
} bool insert(int i,int l,int r,int a,int b)//是否可见
{
if(pnode[i].covered == true)//如果要找的已经被覆盖
return false;
if(l == a && r == b)
{
pnode[i].covered = true;
return true;
} bool ans;
int mid = (l + r)>>1;
if (mid >= b)
ans = insert(i*2,l, mid, a, b);
else if (mid < a)
ans = insert(i*2+1,mid+1, r, a, b);
else
{
bool x1 = insert(i*2,l, mid, a, mid);
bool x2 = insert(i*2+1,mid+1, r, mid+1, b);
ans = x1 || x2;
} if(pnode[i*2].covered == true && pnode[i*2+1].covered == true)
pnode[i].covered = true;
return ans;
} int main()
{
int T,n,tot;
scanf("%d",&T); while(T--)
{
scanf("%d",&n);
tot = 0;
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&l[i],&r[i]);
x[tot++] = l[i];
x[tot++] = r[i];
} sort(x,x+tot);
tot = unique(x,x+tot)-x;
int all=1;
for(int i = 0;i < tot;i++)
{
has[x[i]] = all;
if(i < tot - 1)
{
if(x[i+1] - x[i] == 1)
all++;
else
all+=2;
}
} build(1,1,all);
int num = 0; for(int i = n;i >=1;i--)
{
if(insert(1,1,all,has[l[i]],has[r[i]]))
num ++;
} printf("%d\n",num); }
return 0;
}

  

poj 2528 (线段树+离散化)的更多相关文章

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

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

  2. poj 2528 线段树+离散化

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

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

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

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

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

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

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

  6. poj 2528 线段树区间修改+离散化

    Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...

  7. Mayor's posters POJ - 2528 线段树(离散化处理大数?)

    题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...

  8. Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长

    参考  https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...

  9. Mayor's posters POJ - 2528 线段树区间覆盖

    //线段树区间覆盖 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...

  10. POJ 2528 线段树

    坑: 这道题的坐标轴跟普通的坐标轴是不一样的-- 此题的坐标轴 标号是在中间的-- 线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了 D ...

随机推荐

  1. django的模板(二)

    模板(二) 实验简介 本节继续介绍模板的常用标签,for.if.ifequal和注释标签. 一.基本的模板标签和过滤器 1. 标签 if/else {% if %} 标签检查(evaluate)一个变 ...

  2. 利用python实现简单登陆注册系统

    #!/usr/bin/env python # -*- coding:utf-8 -*- def login(username,password): ''' :param username:用户名 : ...

  3. submit()提交表单时,显示警示框

    我同事在实现submit()提交表单时,想要页面弹出警示框. 但是折腾了几小时后发现,submit()始终不执行. 她的代码如下: $(document).ready(function(){ $(&q ...

  4. thinkphp框架调用类不存在的方法

    thinkphp框架调用类不存在的方法调用类不存在的方法,不会报错,但是也不会执行,这是根据tp框架里面的一个魔术方法,框架里面一共才十几个魔术方法

  5. gradle入门(1-8)gradle 的依赖查看、依赖排除和指定版本(需要验证!)

    一.依赖查看 gradle dependencies 在gradle dependencies输出会有如下几种标记: 1.版本 : 唯一的依赖. 2.版本():还存在该库其他版本的依赖或者间接依赖,并 ...

  6. maven入门(10)maven的仓库

    [0]README 1)本文部分文字转自 "maven实战",旨在 review  "maven(6)仓库" 的相关知识:   [1]何为 Maven仓库 1) ...

  7. Python模块 - paramiko

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...

  8. Django实现发邮件

    1 首先去自己的邮箱申请,在设置里面找,申请开通smtp服务,我用的是163邮箱 2 在项目下settings.py中添加设置: # 配置邮箱发邮件的相关功能 #这一项是固定的 EMAIL_BACKE ...

  9. [洛谷P2024/POJ1182]食物链 - 带偏移量的并查集(2)

    Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的 ...

  10. angular-单页面应用程序

    我们都知道angularjs是单一页面应用程序,那什么是单一页面应用程序呢?单一页面应用程序到底有什么好处呢? 下面我们来看一下: 首先我觉得可以把页面的响应模式分成这样大概3个阶段: 1. 最传统的 ...