CF 6E Exposition(RMQ | 线段树,二分)(二)

2014-11-24 09:13:49 · 作者: · 浏览: 1
n(Min[L][k],Min[R-(1< }

// 二分求出所有答案
void binary(int p,int left,int right){
while(left < right){
int m = mid;
maxx=-1, minx=10000000;
query(p,m);
int dif = maxx-minx;
if(dif > k) right=m;
else left=m+1;
}
if(left-p>ans_max){
ans_max=left-p;
pos=0;
loc[pos][0]=p,loc[pos][1]=left-1;
}
else if(left-p==ans_max){
++pos;
loc[pos][0]=p,loc[pos][1]=left-1;
}
}

int main(){
while(~scanf("%d%d",&n,&k)){
FOR(i,1,n+1) scanf("%d",&A[i]);
RMQ_init();
ans_max=0;
FOR(i,1,n+1){
binary(i,i,n+1);
}
printf("%d %d\n",ans_max,pos+1);
for(int i=0; i<=pos; ++i)
printf("%d %d\n",loc[i][0],loc[i][1]);
}
return 0;
}