hdu 1025 n*logn最长上升子序列
/*
TLE
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn=5e5+;
int a[maxn],b[maxn],c[maxn],f[maxn<<];
inline int max(int a,int b){return a>b?a:b;}
void swap(int &a,int &b){int t=a;a=b;b=t;}
void qsort(int l,int r)
{
if(l<r)
{
int key=b[l],i=l,j=r;
while(i!=j)
{
while(b[j]>=key && i<j) j--;
while(b[i]<=key && i<j) i++;
if(i<j) swap(b[i],b[j]);
}
b[l]=b[i];b[i]=key;
qsort(l,i-);
qsort(i+,r);
}
}
int binary_search(int l,int r,int val)
{
int mid;
while(l<=r)
{
mid=(l+r)>>;
if(c[mid]>val) r=mid-;
else if(c[mid]==val) return mid;
else l=mid+;
}
return -;
}
void updata(int pos,int v,int l,int r,int rt)
{
if(l==r)
{
f[rt]=v;return;
}
int mid=(l+r)>>;
if(pos<=mid) updata(pos,v,l,mid,rt<<);
else updata(pos,v,mid+,r,rt<<|);
}
int query(int L,int R,int l,int r,int rt)
{
if(L<=l && r<=R)
return f[rt];
int mid=(l+r)>>;
int ans;
if(L<=mid) ans=query(L,R,l,mid,rt<<);
if(R>mid) ans=max(ans,query(L,R,mid+,r,rt<<|));
return ans;
}
int main()
{
int icase=,n,tmp,i,cnt;
while(~scanf("%d",&n))
{
for(i=;i<=n;i++)
{
scanf("%d%d",&tmp,a+i);b[i]=a[i];
}
qsort(,n);cnt=;c[]=b[];
for(i=;i<=n;i++)
if(b[i]!=b[i-])
c[++cnt]=b[i];
memset(f,,sizeof(f));
int ans=,maxv,x;
for(i=;i<=n;i++)
{
x=binary_search(,cnt,a[i]);
if(x>) maxv=query(,x-,,cnt,);
else maxv=;
updata(x,maxv+,,cnt,);
if(maxv+>ans) ans=maxv+;
}
printf("Case %d:\n",++icase);
if(ans==) printf("My king, at most 1 road can be built.\n\n");
else printf("My king, at most %d roads can be built.\n\n",ans);
}
return ;
}
/*
2
1 2
2 1
3
1 2
2 3
3 1
*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn=5e+;
int dp[maxn],f[maxn]; int upper_bound(int l,int r,int val)//二分求上界
{
int mid,ans=-;
while(l<=r)
{
mid=(l+r)>>;
if(dp[mid]>=val) ans=mid,r=mid-;
else l=mid+;
}
return ans;
} int main()
{
int icase=,n,i,cnt,x,y;
while(~scanf("%d",&n))
{
for(i=;i<=n;i++)
{
scanf("%d%d",&x,&y);
f[x]=y;
}
dp[]=f[];cnt=;
for(i=;i<=n;i++)
{
x=upper_bound(,cnt,f[i]);
if(x==-) dp[++cnt]=f[i];
else dp[x]=f[i];
}
printf("Case %d:\n",++icase);
if(cnt==) printf("My king, at most 1 road can be built.\n\n");
else printf("My king, at most %d roads can be built.\n\n",cnt);
}
return ;
}
hdu 1025 n*logn最长上升子序列的更多相关文章
- HDU 1159 Common Subsequence 最长公共子序列
HDU 1159 Common Subsequence 最长公共子序列 题意 给你两个字符串,求出这两个字符串的最长公共子序列,这里的子序列不一定是连续的,只要满足前后关系就可以. 解题思路 这个当然 ...
- HDU 1513 Palindrome(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- HDU 3998 Sequence (最长上升子序列+最大流)
参考链接:http://www.cnblogs.com/gentleh/archive/2013/03/30/2989958.html 题意:求一个序列的最长上升子序列,及其个数(注意:两个最长上升子 ...
- HDU 4604 Deque 二分最长上升子序列
题目大意就是给一个deque 然后有n个数,依次进行操作,每种操作,你可以把这个数放在deque首部,也可以放在尾部,也可以扔掉不管,但是要保证deque中的数是非递减的.最要求deque中最长能是多 ...
- [ An Ac a Day ^_^ ] HDU 1257 基础dp 最长上升子序列
最近两天在迎新 看来只能接着水题了…… 新生培训的任务分配 作为一个有担当的学长 自觉去选了动态规划…… 然后我觉得我可以开始水动态规划了…… 今天水一发最长上升子序列…… kuangbin有nlog ...
- hdu 5748 Bellovin【最长上升子序列】
题目链接:https://vjudge.net/contest/148584#problem/A 题目大意: 解题思路:题目要求为:输出与已知序列的每一个元素的f(i)(f(i)的定义如题)相同的字典 ...
- HDU 4681 string 求最长公共子序列的简单DP+暴力枚举
先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
随机推荐
- API调用微信getWXACodeUnlimit()获取小程序码
微信文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/qr-code/getWXACodeUnlimit.html? ...
- python简单实用gunicorn部署
linux 安装 pyuthon 安装 pip install gunicorn manage.py 文件 from app import create_app app = create_app( ...
- 判断Datable是否有数据
采用any()方法 检查表格的数据是否为空 var table = $('#example').DataTable(); if ( ! table.data().any() ) { alert( 'E ...
- HTTP 配置与编译安装
目录 HTTP 配置与编译安装 HTTP 相关配置 DSO 定义'Main' Server 的文档页面路径 定义站点主页面 站点访问控制常见机制 基于源地址实现访问控制 日志设定 设定默认字符集 定义 ...
- k8s资源配置清单的书写格式(yaml文件)
yaml文件书写格式:5大类:apiVersion: 选择kubectl api-versions里面存在的版本kind: 选择kubectl api-resources结果中的对象资源metadat ...
- Android 性能篇 -- 带你领略Android内存泄漏的前世今生
基础了解 什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是指由程序分配的内存但是由于程序逻辑错误而导致程序失 ...
- python中函数返回多个值
用ipython运行情况如下: # 新建一个函数 In [1]: def nums(): ...: a = 11 ...: b = 22 ...: c = 33 ...: return [a,b,c] ...
- Flask初学者:session操作
cookie:是一种保存数据的格式,也可以看成是保存数据的一个“盒子”,服务器返回cookie给浏览器(由服务器产生),由浏览器保存在本地,下次再访问此服务器时浏览器就会自动将此cookie一起发送给 ...
- usb gadge驱动设计之我是zero
此处将以zero.c为例进行讲解. 第一次接触zero.c驱动的时候,是因为某项目需要,提供一种usb字符设备,希望能够通过字符设备打开,读取和发送文件.当时能想到的就是zero.c文件,本打算按照z ...
- Jack Straws POJ - 1127 (简单几何计算 + 并查集)
In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the table ...