题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了)。

思路:很明显就是线段树更改区间,不过这个区间的跨度有点大(看数据),不过n<10000,所以就可以把这些广告牌的边界重新定义编号,比如:

n输入 2

1 6

2 13

排序以后,1还是1,2还是2,6就可以看成3,13就可以看成4

变成:

1 3

2 4

其实性质还是没有变,两个广告牌都可以看到,不过线段树开的数组就不用很大了。

#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int ans,book[20010],index[10000005],sum[400010],lazy[400010],a[10010],b[10010],c[20010];
void pushdown(int l,int r,int o)
{
if(lazy[o])
{
lazy[o<<1]=lazy[o<<1|1]=lazy[o];
sum[o<<1|1]=sum[o<<1]=lazy[o];
lazy[o]=0;
}
}
void update(int l,int r,int o,int x,int y,int c)
{
if(x<=l&&y>=r)
{
sum[o]=c;
lazy[o]=c;
return;
}
pushdown(l,r,o);
int mid=(l+r)/2;
if(x<=mid) update(l,mid,o<<1,x,y,c);
if(y>mid) update(mid+1,r,o<<1|1,x,y,c);
}
void query(int l,int r,int o)
{
if(l==r)
{
if(!book[sum[o]])
{
ans++;
book[sum[o]]=1;
}
return;
}
pushdown(l,r,o);
int mid=(l+r)/2;
query(l,mid,o<<1);
query(mid+1,r,o<<1|1);
}
int main()
{
int t,n,x,y;
scanf("%d",&t);
while(t--)
{
memset(book,0,sizeof(book));
memset(sum,0,sizeof(sum));
memset(lazy,0,sizeof(lazy));
scanf("%d",&n);
int w=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
c[w++]=a[i];
c[w++]=b[i];//重新编号
}
sort(c,c+w);
int cnt=0;
for(int i=0;i<w;i++)
if(c[i]!=c[i+1])
index[c[i]]=++cnt;
for(int i=1;i<=n;i++)
{
x=index[a[i]];
y=index[b[i]];
update(1,cnt,1,x,y,i);
}
ans=0;
query(1,cnt,1);
printf("%d\n",ans);
}
return 0;
}

Mayor's posters POJ - 2528 线段树(离散化处理大数?)的更多相关文章

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

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

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

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

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

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

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

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

  5. poj 2528 线段树+离散化

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

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

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

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

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

  8. POJ 2528 Mayor's posters 贴海报 线段树 区间更新

    注意离散化!!!线段树的叶子结点代表的是一段!!! 给出下面两个简单的例子应该能体现普通离散化的缺陷: 1-10 1-4 5-10 1-10 1-4 6-10 普通离散化算出来的结果都会是2,但是第二 ...

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

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

随机推荐

  1. SSM动态切换数据源

    有需求就要想办法解决,最近参与的项目其涉及的三个数据表分别在三台不同的服务器上,这就有点突兀了,第一次遇到这种情况,可这难不倒笔者,资料一查,代码一打,回头看看源码,万事大吉 1. 预备知识 这里默认 ...

  2. Windows下安装虚拟机

    一.准备工作 1.下载centos7操作系统 阿里巴巴站点: http://mirrors.aliyun.com/centos/7/isos/x86_64/ 2.下载VMware虚假机 可以直接通过3 ...

  3. javascript中this指向的问题

    javascript中this只有函数执行时候才能确定到底指向谁,实际this最终指向是那个调用它的对象. 1,匿名函数中的this——window function foo(){ var lastN ...

  4. linux命令行界面如何安装图形化界面

    linux命令行界面如何安装图形化界面 目录 问题描述 解决方案 安装包 测试是否安装成功 如何卸载图形化界面 遭遇问题 问题描述 当我们在安装Linux系统时,我们一开始可能安装的是非图形界面的系统 ...

  5. SpringBoot图文教程15—项目异常怎么办?「跳转404错误页面」「全局异常捕获」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1-Spr ...

  6. IntelliJ IDEA 2018.3 x64的破解和安装

    IntelliJ IDEA 2018.3 x64的破解和安装 前言 IntelliJ IDEA 作为一个优秀的Java开发环境,深受许多开发者喜爱,但是它的价格却贵得让人无法接受,这篇文章将介绍永久激 ...

  7. Fortify Audit Workbench 笔记 Cross-Site Scripting-Persistent

    Cross-Site Scripting: Persistent Abstract 向 Web 浏览器发送非法数据会导致浏览器执行恶意代码. Explanation Cross-Site Script ...

  8. go package 学习笔记 —— strconv(string与其他基本数据类型(int, float, bool)的转换)

    strconv实现了go中基本数据类型与string之间的转换. How to use in go go doc:https://godoc.org/strconv import "strc ...

  9. html标签及网页语义化理解

    最近重新看了一遍html标签的知识,有很多新的体会,对语义化有了一个新的理解. 那么什么叫做语义化呢,说的通俗点就是:明白每个标签的用途(在什么情况下使用此标签合理)比如,网页上的文章的标题就可以用标 ...

  10. 环境变量之classpath配置和临时配置

    前言 本篇文章介绍classpath环境变量的配置和一个环境变量配置的技巧:临时配置path环境变量. 正文 classpath环境变量配置 在上完了"Hello World"这堂 ...