poj2528 Mayor's posters(线段树,离散化)
离散化的思想:

n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000)。
求出最后还能看见多少张海报。
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- #include <string.h>
- using namespace std;
- const int MAXN = 10000+5;
- struct Node{
- int l,r;
- int c;
- }tree[14*MAXN]; //线段树
- struct Seg{
- int l,r;
- }s[MAXN]; //存储报纸的范围
- struct Seg2{
- int p;
- int index;
- }a[2*MAXN]; //存放端点信息
- bool cmp(Seg2 x,Seg2 y){
- return x.p<y.p;
- }
- int color[2*MAXN];
- int ans=0;
- void build(int node,int l,int r){
- tree[node].l=l,tree[node].r=r,tree[node].c=0;
- if (l==r) return;
- build(node*2,l,(l+r)/2);
- build(node*2+1,(l+r)/2+1,r);
- }
- void update(int node,int l,int r,int v){
- //cout<<l<<" "<<r<<endl;
- if (tree[node].l>=l && tree[node].r<=r){
- tree[node].c=v;
- return;
- }
- if (tree[node].c>0){
- tree[2*node].c=tree[2*node+1].c=tree[node].c;
- tree[node].c=0;
- }
- int mid=(tree[node].l+tree[node].r)/2;
- if (r<=mid)
- update(2*node,l,r,v);
- else if (mid<l)
- update(2*node+1,l,r,v);
- else{
- update(2*node,l,mid,v);
- update(2*node+1,mid+1,r,v);
- }
- }
- void count(int node){
- if (tree[node].c>0){
- if (color[tree[node].c]==0){
- ans++;
- color[tree[node].c]++;
- }
- return;
- }
- if (tree[node].l==tree[node].r)
- return;
- count(2*node);
- count(2*node+1);
- }
- void solve(int n,int t){
- build(1,1,t);
- //cout<<"--------"<<endl;
- for (int i=1;i<=n;i++){
- update(1,s[i].l,s[i].r,i);
- //cout<<"123456789\n";
- }
- ans=0;
- memset(color,0,sizeof(color));
- count(1);
- printf("%d\n",ans);
- }
- int main(){
- int t,n;
- scanf("%d",&t);
- while (t--){
- scanf("%d",&n);
- for (int i=1;i<=n;i++){
- scanf("%d%d",&s[i].l,&s[i].r);
- a[2*i-1].p=s[i].l;
- a[2*i-1].index=i; //标记为左端点
- a[2*i].p=s[i].r;
- a[2*i].index=-i; //标记为右端点
- }
- sort(a+1,a+2*n+1,cmp);
- //数据离散化
- int t=1;
- int tmp=a[1].p;
- for (int i=1;i<=2*n;i++){
- if (tmp!=a[i].p){
- tmp=a[i].p;
- t++;
- }
- if (a[i].index>0)
- s[a[i].index].l=t;
- else
- s[-a[i].index].r=t;
- }
- /*
- for (int i=1;i<=n;i++){
- printf("%d %d\n",s[i].l,s[i].r);
- }
- */
- solve(n,t);
- }
- return 0;
- }
poj2528 Mayor's posters(线段树,离散化)的更多相关文章
- [poj2528] Mayor's posters (线段树+离散化)
线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...
- POJ 2528 Mayor's posters(线段树+离散化)
Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
- Mayor's posters (线段树+离散化)
Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...
- Mayor's posters(线段树+离散化POJ2528)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...
- POJ 2528 Mayor's posters (线段树+离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions:75394 Accepted: 21747 ...
- poj 2528 Mayor's posters 线段树+离散化 || hihocode #1079 离散化
Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...
- POJ2528Mayor's posters[线段树 离散化]
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 59683 Accepted: 17296 ...
- POJ2528 Mayor's posters 【线段树】+【成段更新】+【离散化】
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39795 Accepted: 11552 ...
随机推荐
- 游戏开发人员眼中的Unity 3D网页游戏測评报告
眼下.能够实现3D页游的主流技术有Silverlight.XNA.Flash.HTML5和Unity3D. 当中.Unity3D作为一款专注于3D游戏的浏览器插件.最近在国内外页游产品线骚动异常:本人 ...
- 开发效率必备之Mac双屏显示
自从2015年9月苹果公布EI Captain,带来了一个新的功能,叫做分屏,也就是在一块屏幕上分成左右两部分,能够分别进行操作,互不影响. 例如以下图所看到的: watermark/2/text/a ...
- 0x27 A*
终于完全了解A*到底是什么玩意儿了 对于当前的决策,选取当前花费+预估花费最小来拓展. 因为假如预估出现失误,那么很可能就会延伸到一个错误的决策点,而这个决策点偏偏就是ed,而由于预估失误,其他点的当 ...
- hdoj--1495--非常可乐(搜索+隐式图)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- CSS中alt和title属性的正确使用
1.在<img>标签中的使用 alt:全称为alttext,实质是当图片无法正确显示时用于替换(在IE下同时起到了title的作用,即鼠标滑过时文字提示): title:鼠标经过时文字提示 ...
- git服务器搭建-gitosis
需求 硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到. 软件需求:git-core, gitosis, openssh-server, openssh-client, Ap ...
- redis模拟消息订阅
使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 客户端例子: redis 127.0.0.1:6379> subscribe news Read ...
- 洛谷P4012 深海机器人问题(费用流)
题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...
- mysql+spring+mybatis实现数据库读写分离[代码配置] .
场景:一个读数据源一个读写数据源. 原理:借助spring的[org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource] ...
- Haskell手撸Softmax回归实现MNIST手写识别
Haskell手撸Softmax回归实现MNIST手写识别 前言 初学Haskell,看的书是Learn You a Haskell for Great Good, 才刚看到Making Our Ow ...