本来也不打算写这道题的解题报告的,因为比较水
直接维护两个单调队列(最大值,最小值)随便弄弄就行了
但是我开始疯狂不知道为什么的RE,然后实在没办法找root要了数据
测了之后……王苍,根本就没有错啊……
我就去向root反映,root测了一下以前AC的pascal程序……
王苍……又都RE了,实在是感人肺腑……
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 var q1,q2:array[0..10000010] of longint; 2 a:array[0..10000010] of longint; 3 t,i,l1,l2,r1,r2,n,ans:longint; 4 k:longint; 5 6 function max(a,b:longint):longint; 7 begin 8 if a>b then exit(a) else exit(b); 9 end; 10 11 begin 12 readln(k,n); 13 for i:=1 to n do 14 read(a[i]); 15 t:=1; 16 l1:=1; 17 l2:=1; 18 for i:=1 to n do 19 begin 20 while (l1<=r1) and (a[i]>=a[q1[r1]]) do dec(r1); 21 while (l2<=r2) and (a[i]<=a[q2[r2]]) do dec(r2); 22 inc(r1); 23 q1[r1]:=i; 24 inc(r2); 25 q2[r2]:=i; 26 while (l1<=r1) and (l2<=r2) and (a[q1[l1]]-a[q2[l2]]>k) do 27 if q1[l1]<q2[l2] then 28 begin 29 t:=q1[l1]+1; 30 inc(l1); 31 end 32 else begin 33 t:=q2[l2]+1; 34 inc(l2); 35 end; 36 ans:=max(ans,i-t+1); 37 end; 38 writeln(ans); 39 end.