bzoj2096

本来也不打算写这道题的解题报告的,因为比较水
直接维护两个单调队列(最大值,最小值)随便弄弄就行了
但是我开始疯狂不知道为什么的RE,然后实在没办法找root要了数据
测了之后……王苍,根本就没有错啊……
我就去向root反映,root测了一下以前AC的pascal程序……
王苍……又都RE了,实在是感人肺腑……

 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.
View Code
原文地址:https://www.cnblogs.com/phile/p/4473077.html