高兴天数

Description

  小X性格很独特,如果她今天高兴度比上次一样或更高,她就会很善良,相反,如果她今天高兴度比上次低,她就会很凶!现在已经知道小X在N天里每天的高兴度M。根据这N天中她每天高兴度M,合理安排与她相处时间,使大家与小X友好相处尽量多天数。现在要求计算出最多能和小X友好相处多少天。

Input

  共2行,第一行为一个N,第二行为N个数,为小X每天的高兴程度M。

5
2 3 5 6 4

Output

  共1个数,最多能和小X友好相处多少天。

4

Hint

  对于30%的数据,N<=8000。对于100%的数据,N<=31000,M<31000。

Source

  15yjm
 

Sbumit

  这里解释一下:题目所说的“比上次”是指我们和她相处的上一次,而不是指前一天。例如,第三天和她相处后隔了两天后即第六天又与她相处,应该拿第六天心情和第三天心情比较。
  使用库函数:upper_bound( begin, end, num):二分查找第一个大于num的数字,找到返回该数字的地址,不存在则返回end。另外可通过返回的地址减去起始地址begin,得到num数字在数组中的下标。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
using namespace std; 

int main() { 
    //freopen("C:\\Users\\Administrator\\Desktop\\input.txt","r",stdin);
	
	int n; 
	cin>>n;
    
	int a;
	int ans=0;
	int d[n];
	for(int i=0; i<n; i++){
		cin>>a;
		d[i]=INT_MAX;
		int p=upper_bound(d,d+i,a)-d;
		d[p]=a; //维护数组d有序,新数a找到合适位置替代原来的数 
		ans=max(ans,p+1); //因为下标从0开始,所以计算个数时要+1 
	} 
	cout << ans << endl;
	return 0;
}

posted on 2018-12-28 23:52  yejifeng  阅读(365)  评论(0)    收藏  举报

导航