题意:

在一面长度为10000000 的墙上贴广告,告诉你每张海报的l,r(1 <= li <= ri <= 10000000.),让你求最后有几张海报露出来

链接:http://poj.org/problem?id=2528

思路:

由于数据较大,直接开数组不现实,所以我们考虑将每个点离散化,由于这里可能存在原本不相邻的点在离散化后变成相邻

例如三张海报分别为1-5,1-2,4-5,将数据离散化后1,2,4,5分别对应1,2,3,4,此时我们发现用离散化之后的数据得出来的结果

是2,但是实际上可以看到的海报为3,所以当a[i]-a[i-1]>1时,我们要再加入a[i-1]+1,这样就能避免上述情况。

所以,这道题就变成了离散化+线段树区间染色

代码:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <math.h>
#include <string.h>
#include <map>
using namespace std;
const int MAXN=5e4+;
typedef long long ll;
int l_[MAXN],r_[MAXN],lsh[MAXN<<],visit[MAXN],lazy[MAXN<<];
void push_down(int node)
{
lazy[node<<]=lazy[node];
lazy[node<<|]=lazy[node];
lazy[node]=;
}
void update(int node,int l,int r,int x,int y,int k)
{
if(x<=l&&y>=r)
{
lazy[node]=k;
return;
}
if(lazy[node])
push_down(node);
int mid=(l+r)>>;
if(x<=mid)
update(node<<,l,mid,x,y,k);
if(y>mid)
update(node<<|,mid+,r,x,y,k);
}
int ans=;
void query(int node,int l,int r,int x,int y)
{
if(lazy[node])
{
if(!visit[lazy[node]])
ans++,visit[lazy[node]]=;
return;
}
if(l==r)
return;
int mid=(l+r)>>;
if(x<=mid)
query(node<<,l,mid,x,y);
if(y>mid)
query(node<<|,mid+,r,x,y);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(lazy,,sizeof(lazy));
memset(visit,,sizeof(visit));
ans=;
int n;
scanf("%d",&n);
int index=;
for(int i=; i<=n; i++)
{
scanf("%d%d",&l_[i],&r_[i]);
lsh[index++]=l_[i],lsh[index++]=r_[i];
}
sort(lsh,lsh+index);
int temp=index;
for(int i=; i<temp; i++)
if(lsh[i]-lsh[i-]>)
lsh[index++]=lsh[i-]+;
int cnt=unique(lsh,lsh+index)-lsh;
for(int i=; i<=n; i++)
{
l_[i]=lower_bound(lsh,lsh+cnt,l_[i])-lsh+;
r_[i]=lower_bound(lsh,lsh+cnt,r_[i])-lsh+;
update(,,cnt,l_[i],r_[i],i);
}
query(,,cnt,,cnt);
printf("%d\n",ans);
}
return ;
}

最新文章

  1. Ubuntu下配置Samba服务器
  2. 利用 filter 机制 给 静态资源 url 加上时间戳,来防止js和css文件的缓存,利于开发调试
  3. php5.2.3连接sqlserver2008
  4. keyCode,charCode,which
  5. [UIScreen mainScreen].bounds.size.width 和self.view.frame.size.width的区别
  6. C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 用户权限树的实现 -- 权限递归树
  7. Codeforces Round #334 (Div. 2)
  8. 【mysql】关于IO/内存方面的一些优化
  9. Openstack的删除错误网桥,虚拟网络
  10. css在各浏览器中的兼容问题
  11. erlang 基础知识
  12. JS模块与命名空间的介绍
  13. 1133: 零起点学算法40——多组测试数据(a+b)II
  14. Set up HTTP/2 server with Spring Boot 【基于Spring boot搭建http2.0服务器】
  15. glusterfs 4.0.1 rpc 分析笔记2 (socket.so 模块)
  16. 微信小程序基础之交互操作控件
  17. B20J_2836_魔法树_树链剖分+线段树
  18. MVC控制器传递多个实体类集合到视图的方案总结
  19. js加密转python3
  20. git与eclipse集成之导入组件到Eclipse工程

热门文章

  1. redis位图命令
  2. [经验] Java 使用 netty 框架, 向 Unity 客户端的 C# 实现通信[2]
  3. 【PAT甲级】1092 To Buy or Not to Buy (20 分)
  4. ELK日志分析系统部署
  5. 「NOI2016」区间
  6. Flask - Flask高级技巧(Advanced Flask Patterns)
  7. C# MD5加密-MD5Helper
  8. Airless Bottle-Can Be Used On Any Cream Product
  9. ndarray数据类型及转换
  10. Spring Boot 定时任务 Quartz 使用教程