离散化的思想:

对于这样的数据
(3,10000)。
(9,1000000)。
(5。100000),
(1,1000)。
(7,1000000)
我们能够将其处理为
(2,7)。
(5,9)。
(3,8),
(1,6),
(4,9)

我们再对离散化之后的数据进行处理即可了。
题目意思:

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&#39;s posters(线段树,离散化)的更多相关文章

  1. [poj2528] Mayor's posters (线段树+离散化)

    线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...

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

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

  3. poj 2528 Mayor's posters 线段树+离散化技巧

    poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...

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

    Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...

  5. Mayor's posters(线段树+离散化POJ2528)

    Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51175 Accepted: 14820 Des ...

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

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

  7. poj 2528 Mayor's posters 线段树+离散化 || hihocode #1079 离散化

    Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...

  8. POJ2528Mayor's posters[线段树 离散化]

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

  9. POJ2528 Mayor&#39;s posters 【线段树】+【成段更新】+【离散化】

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

随机推荐

  1. mysql点滴_02程序中运行sql语句报字符集问题解决

    程序中运行  "SELECT t.EVENT_TYPE_ID FROM RATABLE_EVENT_TYPE t WHERE t.NAME='帐期末费用转移事件'"  报错 错误码 ...

  2. ios假设写一个提示带动画的View,能够来引导用户行为

    先上图: 这个UIView能够这样写: -(id)initWithFrame:(CGRect)frame backImage:(UIImage*)image msgStr:(NSString*)txt ...

  3. iOS 常见面试图总结2

    1.请简述storyboard和xib的差别? 一个project中.能够有多个xib文件,一个xib文件相应着一个视图类控制器,和多个视图. 然而.使用 storyboard时,一个project仅 ...

  4. 拥抱Mac之码农篇

    拥抱Mac之码农篇 使用Mac大概两年时间.之前用着公司配的一台27寸的iMac.无奈机械硬盘严重拖慢速度,影响工作心情.于是入手Macbook Retina 13.这两年的开发工作所有在Mac上完毕 ...

  5. BZOJ:2958 序列染色 DP

    bzoj2958 序列染色 题目传送门 Description 给出一个长度为N由B.W.X三种字符组成的字符串S,你需要把每一个X染成B或W中的一个. 对于给出的K,问有多少种染色方式使得存在整数a ...

  6. Navicat Premium 12 模型导出sql

    找了半天,终于找到导出sql了!

  7. 利用机器学习进行DNS隐蔽通道检测——数据收集,利用iodine进行DNS隐蔽通道样本收集

    我们在使用机器学习做DNS隐蔽通道检测的过程中,不得不面临样本收集的问题,没办法,机器学习没有样本真是“巧妇难为无米之炊”啊! 本文简单介绍了DNS隐蔽通道传输工具iodine,并介绍如何从iodin ...

  8. poj--1236--Network of Schools(scc+缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14062   Accepted: 56 ...

  9. JAVA好书之《深入理解Java虚拟机》

    最近打算做好现有工作的前提下,扎实一下自己专业的技术知识,并将相关的经典书也记录一下.今天看了一些JVM相关的知识,这里面的经典是<深入理解Java虚拟机>,适合有点基础又想深入理解其中原 ...

  10. 7.treeview

    ui mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include < ...