这道题看起来仿佛有点水
从小到大贪心,舍去左下角和右上角
空间卡得有点紧,用integer/short int
1、30分做法
记录数字的顺序及每个数字的位置,然后对于每个数字的位置与前面已取数字的位置进行判断,时间复杂度(n3)
const maxnm=5000*5000+10;maxn=5000+10;var pre,now,a,b,c,d,i1:int64; n,m,qu,nm,i,j,num,u,v,k:longint; t:array[0..maxnm] of longint; x:array[0..maxnm,1..2] of integer; bool:array[0..maxnm] of boolean; q:array[0..maxn*2] of longint;procedure swap64(var x,y:int64);var t:int64;begin t:=x;x:=y;y:=t;end;procedure swaplong(var x,y:longint);var t:longint;begin t:=x;x:=y;y:=t;end;function check(x1,y1,x2,y2:longint):boolean;begin if (x1y2)or(x1>x2)and(y1
2、100分做法
对于行,记录比自身大的行的最小列,比自身小的行的最大列,对每个数字进行判断,时间复杂度(n2)
bzoj过,被UOJ卡到60。。。。。。
const maxnm=5000*5000+10;maxn=5000+10;oo=1000000000;var pre,now,a,b,c,d,i1:int64; n,m,qu,nm,i,j,num,u,v:longint; t:array[0..maxnm] of longint; x:array[0..maxnm,1..2] of integer; line:array[0..maxn,0..1] of longint;function min(x,y:longint):longint;begin if xy then max:=x else max:=y;end;procedure swap64(var x,y:int64);var t:int64;begin t:=x;x:=y;y:=t;end;procedure swaplong(var x,y:longint);var t:longint;begin t:=x;x:=y;y:=t;end;function check(x1,y1,x2,y2:longint):boolean;begin if (x1 y2)or(x1>x2)and(y1 x[i,2])or(line[x[i,1],1]