[POI 2010] PIL - Pilots (BZOJ 2096)

단조 로 운 대열
낙 곡 제목 전송 문 BZOJ 제목 전송 문
물 을 젓다
두 바늘 로 밀어 서 단조 로 운 대기 열 유지 최대 최소 값 입 니 다.
코드:
#include
#include
#include
#include
#define N 3000005
#define F inline
using namespace std;
int n,k,ans,a[N],mn[N],mx[N];
F char readc(){
	static char buf[100000],*l=buf,*r=buf;
	if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);
	return l==r?EOF:*l++;
}
F int _read(){
	int x=0; char ch=readc();
	while (!isdigit(ch)) ch=readc();
	while (isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=readc();
	return x;
}
int main(){
	k=_read(),n=_read();
	for (int i=1;i<=n;i++) a[i]=_read();
	int ln=1,rn=0,lx=1,rx=0,l=1,r=0;
	while (r<n){
		int x=a[++r];
		while (ln<=rn&&a[mn[rn]]>=x) rn--;
		while (lx<=rx&&a[mx[rx]]<=x) rx--;
		mn[++rn]=mx[++rx]=r;
		while (a[mx[lx]]-a[mn[ln]]>k&&ln<=rn&&lx<=rx){
			l++; if (mn[ln]<l) ln++; if (mx[lx]<l) lx++;
		}
		ans=max(ans,r-l+1);
	}
	return printf("%d
"
,ans),0; }

좋은 웹페이지 즐겨찾기