Description
BPM在家测量了连续n天的温度,但BPM家的温度计有毛病,于是乎BPM把第i天的温度定在[li,ri]范围内。无聊的BPM想要知道这n天的温度中,满足可能温度不降的连续最长段有多长。于是他又把这个任务交给了你。
Input
第一行一个整数n,表示天数。
接下来n行,每行两个整数li,ri。
Output
一行一个整数,表示答案。
Sample Input
6
6 10
1 5
4 8
2 5
6 8
3 5
Sample Output
4
Hint
对于前40%的数据,1<=n<=1000
对于前100%的数据,1<=n<=100000,-10^9<=li<=ri<=10^9
做法:稍有变动的最长不下降子序列
代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#define maxn 100007
using namespace std;
struct arr
{
int l,r;
}f[maxn];
int d[maxn],n,ans;
int main()
{
//freopen("temp.in","r",stdin);
//freopen("temp.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d",&f[i].l,&f[i].r);
for (int i=1;i<n;i++)
{
int e=0;
d[++e]=f[i].l;
for (int j=i+1;j<=n;j++)
{
e++;
if (f[j].r<d[e-1])
{
e--;
break;
}
if (f[j].r>=d[e-1]) d[e]=f[j].r;
if (f[j].r>=d[e-1] && f[j].l<d[e-1]) d[e]=d[e-1];
if (f[j].l>=d[e-1]) d[e]=f[j].l;
}
ans=max(ans,e);
}
cout<<ans;
fclose(stdin);
fclose(stdout);
}