Constructing Roads In JGShining's Kingdom

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 21002    Accepted Submission(s): 5935

Problem Description
JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which are located in two parallel lines.

Half of these cities are rich in resource (we call them rich cities) while the others are short of resource (we call them poor cities). Each poor city is short of exactly one kind of resource and also each rich city is rich in exactly one kind of resource. You may assume no two poor cities are short of one same kind of resource and no two rich cities are rich in one same kind of resource.

With the development of industry, poor cities wanna import resource from rich ones. The roads existed are so small that they're unable to ensure the heavy trucks, so new roads should be built. The poor cities strongly BS each other, so are the rich ones. Poor cities don't wanna build a road with other poor ones, and rich ones also can't abide sharing an end of road with other rich ones. Because of economic benefit, any rich city will be willing to export resource to any poor one.

Rich citis marked from 1 to n are located in Line I and poor ones marked from 1 to n are located in Line II.

The location of Rich City 1 is on the left of all other cities, Rich City 2 is on the left of all other cities excluding Rich City 1, Rich City 3 is on the right of Rich City 1 and Rich City 2 but on the left of all other cities ... And so as the poor ones.

But as you know, two crossed roads may cause a lot of traffic accident so JGShining has established a law to forbid constructing crossed roads.

For example, the roads in Figure I are forbidden.

In order to build as many roads as possible, the young and handsome king of the kingdom - JGShining needs your help, please help him. ^_^

 
Input
Each test case will begin with a line containing an integer n(1 ≤ n ≤ 500,000). Then n lines follow. Each line contains two integers p and r which represents that Poor City p needs to import resources from Rich City r. Process to the end of file.
 
Output
For each test case, output the result in the form of sample.
You should tell JGShining what's the maximal number of road(s) can be built.
 
Sample Input
2
1 2
2 1
3
1 2
2 3
3 1
Sample Output
Case 1:
My king, at most 1 road can be built.
Case 2:
My king, at most 2 roads can be built.

Hint

Huge input, scanf is recommended.

手写二分搜索时经常陷入无限循环,这里是在数组中查找大于等于value的最小元素下标。
    这里注意一下模板写法。数组下表从a到b时,l=a-1,r=b+1,while(r-l>1)
 #include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define Max 500005
int dp[Max];
struct node
{
int p,r;
}a[Max];
bool cmp(node x,node y)
{
return x.p<=y.p;
}
int main()
{
int i,j;
int n;
int t=;
freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
int maxn=;
for(i=;i<n;i++)
scanf("%d%d",&a[i].p,&a[i].r);
sort(a,a+n,cmp);
for(i=;i<n;i++)
dp[i]=Max;
/*for(i=0;i<n;i++)
*lower_bound(dp,dp+n,a[i].r)=a[i].r;
int p=lower_bound(dp,dp+n,Max)-dp;
if(p==1)
printf("Case %d:\nMy king, at most %d road can be built.\n\n",t++,1);
else
printf("Case %d:\nMy king, at most %d roads can be built.\n\n",t++,p);*/
for(i=;i<n;i++)
{ int l=-,r=n,m;
while(r-l>)
{
m=(l+r)/;
if(dp[m]>=a[i].r)
r=m;
else
l=m;
}
dp[r]=a[i].r;
}
int l=-,r=n,m;
while(r-l>)
{
m=(l+r)/;
if(dp[m]>=Max)
r=m;
else
l=m;
}
int p=r;
if(p==)
printf("Case %d:\nMy king, at most %d road can be built.\n\n",t++,);
else
printf("Case %d:\nMy king, at most %d roads can be built.\n\n",t++,p);
}
return ;
}

最新文章

  1. sql学习
  2. 【MySQL】MySQL 5.7+ 版本的初始化
  3. mybatis 复习笔记03
  4. 浅谈线程池(中):独立线程池的作用及IO线程池
  5. android107 指针入门
  6. Linux编辑器的选择使用
  7. form WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
  8. 格而知之8:我所理解的Runtime(3)
  9. ASP.NET、HTML+CSS - 弹出提示窗体
  10. android学习8——获取view在屏幕上的绝对坐标
  11. Java基础笔记6
  12. Fiddler的hosts配置使用
  13. 扫码下单支持同桌单人点餐FAQ
  14. commons-dbcp2 新版本2.6使用连接池在关闭服务器的时候会有内存溢出的BUG....
  15. Oracle基础
  16. Structured Streaming教程(1) —— 基本概念与使用
  17. MySQL 常用使用语句
  18. vue +bootstrap 写的小例子
  19. Mac安装jdk1.6
  20. ThinkPHP 模型方法 getField() 和 select() 使用技巧

热门文章

  1. CSAPP--存储器及程序的局部性
  2. [转]MVC模式已死?何不试试MOVE
  3. ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示
  4. 智能卡安全机制比较系列(三) MPCOS
  5. op+3g
  6. BZOJ1532: [POI2005]Kos-Dicing
  7. 定时关机命令-shutdown
  8. java开发经验分享(三)
  9. &lt;转载&gt;Win32控制台工程中创建窗口
  10. 第36讲 activityForResult