高兴天数
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;
}
浙公网安备 33010602011771号