ACderamoj 1216 Beautiful People 二路最长单调递增序列
来源:互联网 发布:陈华编程社区 编辑:程序博客网 时间:2024/06/05 05:28
题目链接:http://acdream.info/problem?pid=1216
题目大意:给你N行数,每行有两个数下x,y,问满足xi>xi-1&&yi>yi-1的序列的长度,并输出任一满足条件的行数组合。
解题思路:和最长单调递增子序列差不多,但是要输出路径,用dp[]记录最长递增子序列的长度,用pre[]记录每个位置的数的前面的一个满足要求的数的位置。
代码如下:
//dp[k]记录的是长度为k的序列的末尾位置//pre[i]记录第i个位置的前一个位置,用于输出过程#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 100005struct node{ int a,b,id;}s[N];int dp[N],pre[N];bool cmp(node a,node b){ if(a.a==b.a) return a.b>b.b; return a.a<b.a;}int bin(int l,int r,int x){ while(l<r) { int m=(l+r)>>1; if(s[dp[m]].b<x) l=m+1; else r=m; } return l;}int main(){ int n,k; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) scanf("%d%d",&s[i].a,&s[i].b),s[i].id=i; sort(s+1,s+n+1,cmp); k=1;dp[1]=1; for(int i=2;i<=n;i++) { if(s[i].b>s[dp[k]].b)//因为已经按照a排序,所以如果s[i].b>s[dp[k]].b,可以保证s[i].a>s[dp[k]].a { pre[i]=dp[k]; dp[++k]=i; } else { int pos=bin(1,k,s[i].b); dp[pos]=i; pre[i]=dp[pos-1]; } } printf("%d\n",k); int w=dp[k--]; printf("%d",s[w].id); while(k--) { w=pre[w]; printf(" %d",s[w].id); } printf("\n"); } return 0;}
0 0
- ACderamoj 1216 Beautiful People 二路最长单调递增序列
- Beautiful People (最长单调递增子序列(变形))
- ACdream 1216 Beautiful People 二路最长上升子序列
- ZOJ 2319 Beautiful People(最长单调递增子序列)(二维LIS)
- ACdream 1216 Beautiful People 复杂度O(n) 二路单调自增子序列模型(LIS)
- ZOJ2319 Beautiful People(贪心,最长递增子序列nlogn,LIS)
- acdream 1426 Beautiful People(双线最长单调子序列)
- ACdream 1216 Beautiful People(二路最长上升子序列 O(nlogn) )
- nyoj241 最长单调递增子序列二
- 一路二路最长单调递增子序列 hdu3998 + ACdream 1216
- ACdream 1216Beautiful People(二重最长上升子序列)
- ACdream 1216 Beautiful People 最长上升子序列变形
- sgu199:Beautiful People(最长上升子序列)
- zoj 2319 Beautiful People 【最长上升序列】
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 最长单调递增子序列
- 关于指针数组的声明
- UVa 10308 - Roads in the North (树上的最长路径)
- Very Deep Convolutional Networks for Large-Scale Image Recognition
- C和C++中const的作用?
- 51单片机外部中断
- ACderamoj 1216 Beautiful People 二路最长单调递增序列
- How to sum values in an array with different hash
- Java移动文件
- 机器学习系列之感知机
- Gold Coins
- CH Round #53 -【Nescafé 32】杯NOIP模拟赛 数据备份 题解
- hustoj 找出子串
- 【Linux】变量$#,$@,$0,$1的意义
- 程序员如何快速准备面试中的算法-July