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 ...
随机推荐
- cocoapods 类库管理利器
作为iOS开发者,第三方类库的使用是最经常的,但鉴于第三方类库的不断更新以及其可能需要依存其他类,如果要使用最新版那么我们需要重新下载再添加到项目中,无疑带来一些繁琐的麻烦,那么现在这里就有一款能解决 ...
- oracle 多行数据合并一行数据
在工作中遇见的oracle知识,多行合并成一行,记录一下 1.取出需要的数据,代码: (SELECT to_char(m.f_meetdate, 'yyyy-MM-dd'), decode(nvl(m ...
- 4396: [Usaco2015 dec]High Card Wins
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 275 Solved: 175[Submit][Status][Discuss] Descriptio ...
- ElasticSearch High Level REST API【2】搜索查询
如下为一段带有分页的简单搜索查询示例 在search搜索中大部分的搜索条件添加都可通过设置SearchSourceBuilder来实现,然后将SearchSourceBuilder RestHighL ...
- mysql 5.7 编译安装脚本。
此脚本尽量运行在centos 服务器上面,用于编译安装mysql 5.7 将此脚本和相应的软件 都放到/usr/local/src 目录下面 由于不能上传附件 所以需要把cmake-3.9.6.ta ...
- 三十五、MySQL 运算符
MySQL 运算符 本章节我们主要介绍 MySQL 的运算符及运算符的优先级. MySQL 主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符 算术运算符 MySQL 支持的算术运算 ...
- BZOJ - 2744 朋友圈 (二分图上的最大团)
[题目大意] 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两 ...
- Fibonacci again and again HDU - 1848
任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1, ...
- HDU 1847 Good Luck in CET-4 Everybody!(SG函数)
Good Luck in CET-4 Everybody! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- LyaoutParameters作用
当你想要动态生成布局的时候,那么就要用到这个参数了.因为那时候你在布局文件里面写的width和height都不起作用了. LinearLayout linearLayout = (LinearLayo ...