题目:
题解:
还是很有思维含量的
一个单调队列的新姿势,不再像一个窗口一样移动了。设计一个递减的序列,按照a[i].x维护最大值
t值用来转化,可以同时记录最大a[i].x和开始的位置(入队之后a[i].y没有用了?)
【时间是开始的时间(i),但里面的值是最大值
代码:
#include <cstdio>
#include <iostream>
#define N 1000005
using namespace std;
struct hh{int x,y;}a[N];
int q[N];
int main()
{
int n,i;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
int head=1,tail=0,maxx=0,lj=0;
for (i=1;i<=n;i++)
{
while (head<=tail && a[q[head]].x>a[i].y) head++;
int t=i;
while (head<=tail && a[q[tail]].x<a[i].x) t=q[tail],tail--;
a[t].x=a[i].x;
q[++tail]=t;
maxx=max(maxx,i-q[head]+1);
}
printf("%d",maxx);
}