题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1178

看ppt
http://wenku.baidu.com/link?url=dJv6LNme7syiLGM-TzbEEKXwx36JWEnI5HFrIlzfmzUXXg4HG8FDggj5WQS3EKL3k3p-sUYeJ268jCvN4t_kq2YPo3I4GXvaGulQjXrO3d7
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj using namespace std; typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP; #define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b) for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k)) template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;} const DB EPS=1e-;
inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
const DB Pi=acos(-1.0); inline int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
}
inline LL gll()
{
LL res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const int maxN=;
const int maxcnt=*maxN;
const int INF=; int N;
struct Ta
{
int l,r,id;
inline friend bool operator < (Ta x,Ta y){return x.l<y.l;}
inline Ta(int _l=,int _r=,int _id=){l=_l;r=_r;id=_id;}
}a[maxN+],temp[maxN+]; int flag[maxN+];
int ans;
PII fin[maxN+];int tol; int cnt,bak[maxcnt+]; inline bool cmpr(Ta x,Ta y){return x.r<y.r;} int tree[maxcnt+]; int next[maxN+];
int jump[maxN+][]; #define lowbit(a) (a&(-a))
inline int ask(int p)
{
p=cnt-p+;
int res=INF;
for(;p>=;p-=lowbit(p))upmin(res,tree[p]);
return res;
}
inline void update(int p,int v)
{
p=cnt-p+;
for(;p<=cnt;p+=lowbit(p))upmin(tree[p],v);
} PII tr[*maxcnt+];
inline void down(int root,int l,int r,int mid)
{
if(tr[root]!=PII(,))
{
tr[root*]=tr[root*+]=tr[root];
tr[root]=PII(,);
}
}
inline void askf(int root,int l,int r,int p,int &x,int &y)
{
if(l>r || p<l || r<p) return;
if(p<=l && r<=p) {x=tr[root].fi;y=tr[root].se;return;}
int mid=(l+r)/;
down(root,l,r,mid);
if(p<=mid) askf(root*,l,mid,p,x,y); else askf(root*+,mid+,r,p,x,y);
}
inline void updatef(int root,int l,int r,int x,int y,PII val)
{
if(l>r || x>y || r<x || y<l)return;
if(x<=l && r<=y){tr[root]=val;return;}
int mid=(l+r)/;
down(root,l,r,mid);
updatef(root*,l,mid,x,y,val);
updatef(root*+,mid+,r,x,y,val);
} inline int solve(int x,int y)
{
if(x>y)return ;
int res=,i,p=lower_bound(a+,a+N+,Ta(x,,))-a;
if(p>N)return ;
red(i,,)
if(jump[p][i]!= && a[jump[p][i]].r<=y)
{
res+=two(i);
p=jump[p][i];
}
if(a[p].r<=y)res++;
return res;
}
inline int check(int x,int y,int l,int r)
{
int t1=solve(x,y);
int t2=solve(x,l-);
int t3=solve(r+,y);
return solve(x,y)==solve(x,l-)++solve(r+,y);
} int main()
{
freopen("bzoj1178.in","r",stdin);
freopen("bzoj1178.out","w",stdout);
int i,j;
N=gint();
re(i,,N)a[i].l=gint(),a[i].r=gint(),a[i].id=i;
re(i,,N)bak[++cnt]=a[i].l,bak[++cnt]=a[i].r;
sort(bak+,bak+cnt+);
cnt=unique(bak+,bak+cnt+)-bak-;
re(i,,N)a[i].l=lower_bound(bak+,bak+cnt+,a[i].l)-bak,a[i].r=lower_bound(bak+,bak+cnt+,a[i].r)-bak;
re(i,,N)fin[a[i].id]=PII(a[i].l,a[i].r);
tol=N;
sort(a+,a+N+,cmpr);
int t=;
re(i,,N){if(a[i].l<=t)flag[i]=;upmax(t,a[i].l);}
int ge=;
re(i,,N)if(!flag[i])temp[++ge]=a[i];
N=ge;
re(i,,N)a[i]=temp[i];
t=;
re(i,,N)if(t<a[i].l){ans++;t=a[i].r;}
cout<<ans<<endl;
re(i,,cnt)tree[i]=INF;
red(i,N,)
{
next[i]=ask(a[i].r+);if(next[i]==INF) next[i]=;
update(a[i].l,i);
}
red(i,N,)
{
jump[i][]=next[i];
re(j,,)jump[i][j]=jump[jump[i][j-]][j-];
}
re(i,,*maxcnt+-)tr[i]=PII(,cnt);
re(i,,tol)
{
int l=fin[i].fi,r=fin[i].se,x,y;
askf(,,cnt,l,x,y);
if(x==- && y==-)continue;
if(!(x<=l && r<=y))continue;
if(check(x,y,l,r))
{
printf("%d ",i);
ans--;if(ans==)break;
updatef(,,cnt,l,r,PII(-,-));
updatef(,,cnt,x,l-,PII(x,l-));
updatef(,,cnt,r+,y,PII(r+,y));
}
}
printf("\n");
return ;
}

bzoj1178的更多相关文章

  1. BZOJ1178 [Apio2009]CONVENTION会议中心 贪心 set

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1178 题意概括 一堆线段,现在取出最多条数,使其互不覆盖,并输出字典序最小的方案. 题解 这题好坑 ...

  2. [BZOJ1177][BZOJ1178][BZOJ1179]APIO2009解题报告

    抱着好奇心态去开始做APIO的往年试题感受一下难度 Oil Description 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地 ...

  3. 【BZOJ-1178】CONVENTION会议中心 倍增 + set (神思路好题!)

    1178: [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 812  Solved: 323[Subm ...

  4. 【bzoj1178】 Apio2009—CONVENTION会议中心

    http://www.lydsy.com/JudgeOnline/problem.php?id=1178 (题目链接) 题意 给出n个区间,问在区间两两不相交的情况下最多能选出多少区间,并输出字典序最 ...

  5. BZOJ1178 [Apio2009]CONVENTION会议中心

    本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Siruseri政府建造了 ...

  6. BZOJ1178 APIO2009 会议中心 贪心、倍增

    传送门 只有第一问就比较水了 每一次贪心地选择当前可以选择的所有线段中右端点最短的,排序之后扫一遍即可. 考虑第二问.按照编号从小到大考虑每一条线段是否能够被加入.假设当前选了一个区间集合\(T\), ...

  7. BZOJ1178或洛谷3626 [APIO2009]会议中心

    BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答 ...

  8. bzoj1178/luogu3626 会议中心 (倍增+STL::set)

    贪心地,可以建出一棵树,每个区间对应一个点,它的父亲是它右边的.与它不相交的.右端点最小的区间. 为了方便,再加入一个[0,0]区间 于是就可以倍增来做出从某个区间开始,一直到某个右界,这之中最多能选 ...

  9. bzoj1178 [Apio2009]CONVENTION会议中心 区间dp+贪心

    [Apio2009]CONVENTION会议中心 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1130  Solved: 444[Submit][S ...

随机推荐

  1. Java实现生命周期管理机制

    先扯再说 最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪:用完想要关闭它时,拉出它的STOP类想要运行时,发现这个类里赫然 ...

  2. hadoop2.2.0的ha分布式集群搭建

    hadoop2.2.0 ha集群搭建 使用的文件如下:    jdk-6u45-linux-x64.bin    hadoop-2.2.0.x86_64.tar    zookeeper-3.4.5. ...

  3. [深入React] 7.组件生命周期

    生命周期一共分三段:初始化,运行中,销毁.按照顺序: 初始化 getDefaultProps():Object 全局只会调用一次,为当前类生成的默认props,会被父组件传入的同名props覆盖. g ...

  4. c\c++复习基础要点08--c++单例模式

    单例模式有许多种实现方法,在c++中,甚至可以直接用一个全局变量做到这一点,但是这样的代码显得不优雅.使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——也就是说除了一个全局实例外,仍然 ...

  5. js解析json,js转换json成map,获取map的key,value

    json串格式 { "10.10.11.1": { "target_1": "34.2", "target_3": &q ...

  6. android键盘事件

    在main.xml文件中代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  7. Android原理揭秘系列之一动态墙纸

    Livewallpaper,即动态墙纸,是Android的一大3D特色功能,用户可以在桌面选择加载动态墙纸,让自己的手机桌面背景旋动起来. 相对于静态桌面壁纸,动态墙纸可以展示各种动态变化的背景,而与 ...

  8. Mysql数据库的mysql Schema 究竟有哪些东西&amp; 手工注入的基础要领

    #查看数据库版本号 mysql> select @@version; +------------+ | @@version  | +------------+ | 5.5.16-log | +- ...

  9. 使用const 提高函数的健壮性

    1.如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针指向的内存单元,起到保护的作用. 例如:void StringCopy(char *strDest, const cha ...

  10. 如何学习javascript?(转)

    推荐几本好书: Step 1: <JavaScript DOM编程艺术> 看这本书之前,请先确认您对Javascript有个基本的了解,应该知道if else之类的语法,如果不懂,先去看看 ...