贪心


  如果不考虑字典序的话,直接按右端点排序,能选就选,就可以算出ans……

  但是要算一个字典序最小的解就比较蛋疼了= =

  Orz了zyf的题解

  就是按字典序从小到大依次枚举,在不改变答案的情况下,能加进来就加。

  但我想错的地方是:如果第 i 个可以在某个最优解的情况下就加入它(即判断[1,n])。但这样最后得到的可能并不是一组合法解。

  所以用set维护前驱后继,判断[l,r]这一段才可以……

P.S.BZOJ200题留念

 /**************************************************************
Problem: 1178
User: Tunix
Language: C++
Result: Accepted
Time:4008 ms
Memory:41124 kb
****************************************************************/ //BZOJ 1178
#include<set>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*sign;
}
typedef long long LL;
const int maxn=;
#define debug
/*******************template********************/
struct rec{int x,y,z;}a[maxn],b[maxn],c[maxn],L,R;
set<rec> s;
set<rec> :: iterator itl,itr;
bool cmp1(rec a,rec b){
return a.x<b.x || (a.x==b.x && a.y>b.y);
}
bool cmp2(rec a,rec b){
return a.z<b.z;
}
bool operator < (rec a,rec b){return a.x<b.x;}
int A[maxn*],B[maxn*],d[maxn*][],n,m,N,M,ans; void ready(){
sort(B+,B+M+);
N=unique(B+,B+M+)-B-;
F(i,,m){
b[i].x=lower_bound(B+,B+N+,b[i].x)-B;
b[i].y=lower_bound(B+,B+N+,b[i].y)-B;
}
sort(b+,b+m+,cmp1);
int j=0x3f3f3f3f;
D(i,m,) if (b[i].y<j) j=b[i].y,a[++n]=b[i];
F(i,,n) c[i]=a[n-i+];
memcpy(a,c,sizeof(c));
memset(d,0x3f,sizeof(d));
j=n;
D(i,N,){
d[i][]=d[i+][];
if (a[j].x==i) d[i][]=min(d[i][],a[j].y);
F(k,,) if (d[i][k-]!=0x3f3f3f3f) d[i][k]=d[d[i][k-]+][k-];
for(;j&&a[j].x==i;j--);
}
}
int calc(int l,int r){
int ans=;
D(i,,) if (d[l][i]<=r) l=d[l][i]+,ans+=<<i;
return ans;
} int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif
m=getint();
F(i,,m){
B[++M]=b[i].x=getint();
B[++M]=b[i].y=getint();
b[i].z=i;
}
ready();
printf("%d\n",calc(,N));
memcpy(a,b,sizeof(b));
sort(a+,a+m+,cmp2);
L.x=,L.y=,R.x=N+,R.y=;
s.insert(L); s.insert(R);
int l,r;
F(i,,m){
L.x=a[i].x,L.y=,R.x=a[i].y,R.y=;
itl=s.lower_bound(L);
itr=s.upper_bound(R);
if (itl!=itr||itr->y==) continue;
itl--; l=itl->x+; r=itr->x-;
if (calc(l,a[i].x-)+calc(a[i].y+,r)+!=calc(l,r)) continue;
s.insert(L); s.insert(R);
printf("%d ",a[i].z);
}
return ;
}

1178: [Apio2009]CONVENTION会议中心

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 512  Solved: 192
[Submit][Status][Discuss]

Description

Siruseri
政府建造了一座新的会议中心。许多公司对租借会议中心的会堂很感兴趣,他们希望能够在里面举行会议。
对于一个客户而言,仅当在开会时能够独自占用整个会堂,他才会租借会堂。会议中心的销售主管认为:最好的策略应该是将会堂租借给尽可能多的客户。显然,有
可能存在不止一种满足要求的策略。 例如下面的例子。总共有4个公司。他们对租借会堂发出了请求,并提出了他们所需占用会堂的起止日期(如下表所示)。
开始日期 结束日期 公司1 4 9 公司2 9 11 公司3 13 19 公司4 10 17
上例中,最多将会堂租借给两家公司。租借策略分别是租给公司1和公司3,或是公司2和公司3,也可以是公司1和公司4。注意会议中心一天最多租借给一个公
司,所以公司1和公司2不能同时租借会议中心,因为他们在第九天重合了。
销售主管为了公平起见,决定按照如下的程序来确定选择何种租借策略:首先,将租借给客户数量最多的策略作为候选,将所有的公司按照他们发出请求的顺序编
号。对于候选策略,将策略中的每家公司的编号按升序排列。最后,选出其中字典序最小1的候选策略作为最终的策略。
例中,会堂最终将被租借给公司1和公司3:3个候选策略是{(1,3),(2,3),(1,4)}。而在字典序中(1,3)<(1,4)<
(2,3)。 你的任务是帮助销售主管确定应该将会堂租借给哪些公司。

Input

输入的第一行有一个整数N,表示发出租借会堂申请的公司的个数。第2到第N+1行每行有2个整数。第i+1行的整数表示第i家公司申请租借的起始和终止日期。对于每个公司的申请,起始日期为不小于1的整数,终止日期为不大于10^9的整数。

Output

输出的第一行应有一个整数M,表示最多可以租借给多少家公司。第二行应列出M个数,表示最终将会堂租借给哪些公司。

Sample Input

4
4 9
9 11
13 19
10 17

Sample Output

2
1 3

HINT

对于50%的输入,N≤3000。在所有输入中,N≤200000 请注意使用Readln读入数据........

Source

[Submit][Status][Discuss]

【BZOJ】【1178】【APIO2009】convention会议中心的更多相关文章

  1. bzoj 1178: [Apio2009]CONVENTION会议中心(少见做法掉落!)【贪心+二分】

    数组若干+手动二分一个的算法,bzoj rank8 ===============================废话分割线=================================== 我我 ...

  2. bzoj 1178 [Apio2009]CONVENTION会议中心

    这题好难啊! 我好菜啊! 思路:对于最多线段不相交, 我们可以按左端点sort之后,贪心取. 但是这个题要求选取的线段排序之后序号的字典序最小. 那么我们如果按序号贪心地从大往小往里放, 那么对于第k ...

  3. 1178: [Apio2009]CONVENTION会议中心

    1178: [Apio2009]CONVENTION会议中心 https://lydsy.com/JudgeOnline/problem.php?id=1178 分析: set+倍增. 首先把所有有包 ...

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

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

  5. BZOJ1178 [Apio2009]CONVENTION会议中心

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

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

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

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

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

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

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

  9. 【BZOJ 1178】【APIO 2009】CONVENTION会议中心

    http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...

随机推荐

  1. mysql 触发器(Trigger)简明总结和使用实例

    一,什么触发器 1,个人理解触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了.2,官方定义触发器(tr ...

  2. 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境

    1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...

  3. 层级目录结构的Makefile递归编译方法

    层级目录结构的Makefile编写方法. 层级目录结构的Makefile编写方法. 0.前言 1.如何编译整个工程 2.过滤每层不需要编译的目录 3将所有输出文件定向输出. 0.前言 假如现在有这样一 ...

  4. python opencv3 圆检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy as np img_ori ...

  5. 浏览器在线查看pdf文件 pdf.js的使用教程

    谷歌浏览器可以直接在线查看pdf,而IE内核浏览器无法在线查看,默认是下载. 这里用到的是pdf.js,不仅支持IE内核浏览器,而且兼容手机查看pdf 官网地址:http://mozilla.gith ...

  6. 关于void main()的误区

    很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过void main( ) .C++ 之父 Bjarne Stroustrup 在他的主页上的 ...

  7. [LearnOpenGL]照相机的变换、坐标系、摄像机

    前言 跟着LearnOpenGL上学着做项目,的确对于知识掌握得更清晰一些了. 第一个项目 第一个项目,是关于简单的熟悉矩阵变换的,创建了10个立方体,代码如下. // 视图矩阵,看作是一个照相机 g ...

  8. php <a href></a>链接地址中是php变量,链接文本也是php变量的代码处理方法

    1.所用php变量名为$recent_tests,是一个二维数组,示例如下: $recent_tests[0]["test_url"] = www.baidu.com $recen ...

  9. Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题

    A. Alyona and Numbers 题目连接: http://www.codeforces.com/contest/682/problem/A Description After finish ...

  10. hrbust 2176 Mac的投票 二分/水题

    Mac的投票 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 52(12 users) Total Accepted: 12(10 us ...