题解:这个嘛,虽然一次性AC了,但是还是有好多的波折——一开始想了半天才有了思路,然后写写写写写,然后中途硬是被打断干别的,然后回来啥都忘了,然后重新瞎折腾代码越改越乱心里越来越烦,然后最后看样子似乎有模有样了,然后Accept,然后没有然后了(想到兴头上被打断思路简直要命啊有木有)。。。好了,说思路——先按照各个牛的位置排个序,然后假如种族为0记-1,1记1,则问题转化为了求最长的和为0的区间,接下来就好办了——记录下同一前缀和的最早出现时间和最晚出现时间,然后找最大时间差即可。。。
var i,j,k,l,m,n:longint; a,b,c,f:array[0..100000] of longint; d,e:array[-60000..60000] of longint;procedure swap(var x,y:longint); var z:longint; begin z:=x;x:=y;y:=z; end;procedure sort(l,r:longint); var i,j,x,y:longint; begin i:=l;j:=r; x:=a[(l+r) div 2]; repeat while a[i] x do dec(j); if i<=j then begin swap(a[i],a[j]); swap(b[i],b[j]); inc(i);dec(j); end; until i>j; if l l then l:=a[e[i]]-a[d[i]+1]; end; writeln(l);end.