题目:acdream 1216 Beautiful
People

题意:每一个人有两个值,能力值和潜力值,然后要求一个人的这两个值都严格大于第二个人的时候,这两个人才干呆在一块儿,给出很多人的值,求最多有多少个人?

分析:非常easy想到是个单调非增模型,假设用O(n*n)的写法的话,会超时!

那么我们就要用二分优化来找。

我们能够先按第一个值 x 从小到大排序,然后按第二个值从大到小排序,这种话找出的最长个数是没有错的。(想想为什么)

假如这样一个例子:

5

1 10

2 12

3 5

3 1

4 3

6 7

首先dp数组仅仅有第一,二组例子:1 10 和2 12

然后第三个例子替换第一组:3 5 和 2 12  ,看看这组例子,发现不满足,可是他总的长度不会变,可是这样保存的话能保证后面出来的数可以最长。所以要想办法保存路径

然后第四组例子替换第三组:3 1 和 2 12

然后第5组例子替换第二组: 3 1  和 4 3 是不是满足条件了,并且最大值值变的更小了,

然后第六组例子加在后面:3 1 和 4 3 和 6 7 ,最大值

最后全部值的二分搜索的值为:1 2 1 1 2 3

那么发现保存路径也简单了。

然后从这个值里面输出一个递减的初始数组标号就能够了、

AC代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 110000;
struct Node
{
int x,y;
int num,count;
};
Node a[N];
int cmp(Node a,Node b)
{
if(a.x!=b.x)
return a.x<b.x;
if(a.y!=b.y)
return a.y>b.y;
}
int dp[N],mark[N]; int Bin_Search(int l,int r,int x)
{
while(l<=r)
{
int mid = (l+r)/2; //假如要求相等的情况下,返回较小的值。
if(dp[mid]==x)
return mid;
else if(dp[mid]<=x)
l=mid+1;
else
r=mid-1;
}
return l;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].num=i;
}
sort(a+1,a+n+1,cmp);
memset(dp,0x3f3f3f3f,sizeof(dp));
int ans=0;
int len = 1;
for(int i=1;i<=n;i++)
{
int tmp=Bin_Search(1,len,a[i].y); //lower_bound(dp+1,dp+1+n,a[i].y)-dp;
if(tmp==len)
len++;
dp[tmp] = a[i].y;
mark[i] = tmp;
ans = max(ans,tmp);
}
printf("%d\n",ans);
for(int i=n;i>=1;i--)
{
//printf("xx%d ",mark[i]);
if(mark[i]==ans)
{
printf("%d",a[i].num);
if(ans!=1)
printf(" ");
ans--;
}
}
printf("\n");
}
return 0;
}

二路单调自增子序列模型【acdream 1216】的更多相关文章

  1. ACdream 1216 (ASC训练1) Beautiful People(DP)

    题目地址:http://acdream.info/problem? pid=1216 这题一開始用的是线段树.后来发现查询的时候还须要DP处理.挺麻烦..也就不了了之了..后来想到,这题事实上就是一个 ...

  2. hdu1087 Super Jumping! Jumping! Jumping!---基础DP---递增子序列最大和

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目大意: 求递增子序列最大和 思路: 直接dp就可以求解,dp[i]表示以第i位结尾的递增子 ...

  3. ACdream 1216——Beautiful People——————【二维LIS,nlogn处理】

    Beautiful People Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (J ...

  4. 九度OJ-1112-导弹拦截-最长不增子序列

    题目1112:拦截导弹 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5218 解决:2603 题目描述: 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...

  5. 最长递增子序列(Longest Increase Subsequence)

    问题 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8 ...

  6. [Optimization] Dynamic programming

    “就是迭代,被众人说得这么玄乎" “之所以归为优化,是因为动态规划本质是一个systemetic bruce force" “因为systemetic,所以比穷举好了许多,就认为是 ...

  7. nyoj 214——单调递增子序列(二)——————【二分搜索加dp】

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...

  8. 浅谈单调栈 By cellur925

    这位dalao的单调栈文章很棒!我写的是他的题单233. http://www.cnblogs.com/COLIN-LIGHTNING/p/8474668.html 一.单调栈的一般写法 ;i< ...

  9. 最长上升子序列(LIS)长度及其数量

    例题51Nod-1376,一个经典问题,给出一个序列问该序列的LIS以及LIS的数量. 这里我学习了两种解法,思路和代码都是参考这两位大佬的: https://www.cnblogs.com/reve ...

随机推荐

  1. 基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串

    编程实现:找出两个字符串中最大公共子字符串,如"abccade"和"dgcadde"的最大子字符串为"cad". 如果不考虑效率的话直接比较 ...

  2. ++i和i++哪个效率高?

    这个问题需要分两种情况来解说: 1.当变量i的数据类型是c++语言默认提供的类型的话,他们的效率是一样的. int a,i=0;     a=++i;汇编代码如下: int a,i=0; 01221A ...

  3. C++ Primer的课后规划问题的第八章

    1.写通常需要一个参数(字符串的地址).字符串和打印功能. 只要.假设提供了第二个参数(int种类),而这个参数不0,的次数的函数打印串数量为该功能将被称为(意,字符串的打印次数不等于第二个參数的值. ...

  4. python下module、package导入

    #encoding=utf-8"""模块:1.import demo #导入demo.py下的所有的函数,调用方法为:demo.function()2.from demo ...

  5. C# inherit

    Case:class A has a construct. class B is inherit from class A and B also has a construct. What's the ...

  6. C#中类的运用(Eighth day)

    又到了总结知识的时刻了,今天在云和学院学习了类的运用,下面是今天所学知识的总结: 理论: 类的定义语法: [访问修饰符] class 类名 { 成员;  // 1.通过字段来描述类别信息的变量 ... ...

  7. ListView列表项

    方法,在xml文件中添加一个ListView,然后在MainActivity中 private ListView listView; private ArrayAdapter<String> ...

  8. NOIP2014解题报告

    day 1 1.生活大爆炸版石头剪刀布(rps) 直接按照题意模拟即可 #include<cstdio> #include<algorithm> #include<cst ...

  9. 【转载】Google Analytics 使用图文全攻略

    转载自:Google Analytics 使用图文全攻略 最近一段时间,因为工作的需要,小励使用GA(GA是Google Analytics的简称)比较频繁,所以花时间研究了一下,从不太了解到会使用( ...

  10. Django forms 关于select和checkbox设置初始选中值及让前端选中指定值

    Django的forms和models一样很牛逼.他有两种功能,一是生成form表单,还有就是form表单的验证. 这里主要说一下生成form表单时经常用到的需要设置 初始值 / 默认值 的情况. 1 ...