今天不考试,不考试,啦啦啦~~
好的严肃,虽然不考试依旧要刷题,搞了一套noip2013玩玩
这道题是day1的第二题,考了树状数组,排序和逆序对,无压力(我不会告诉你第一次快排出错的= =)
代码
var a,b,d,h,e,f:array[0..1001000] of int64; tot,k,n:int64; i,j:longint; procedure qt1(l,r:longint); var i,j,m,p:longint; begin i:=l; j:=r; m:=a[(l+r) div 2]; repeat while a[i]<m do inc(i); while a[j]>m do dec(j); if i<=j then begin p:=a[i]; a[i]:=a[j]; a[j]:=p; p:=d[i]; d[i]:=d[j]; d[j]:=p; inc(i); dec(j); end; until i>j; if i<r then qt1(i,r); if l<j then qt1(l,j); end; procedure qt2(l,r:longint); var i,j,m,p:longint; begin i:=l; j:=r; m:=b[(l+r) div 2]; repeat while b[i]<m do inc(i); while b[j]>m do dec(j); if i<=j then begin p:=b[i]; b[i]:=b[j]; b[j]:=p; p:=f[i]; f[i]:=f[j]; f[j]:=p; inc(i); dec(j); end; until i>j; if i<r then qt2(i,r); if l<j then qt2(l,j); end; function lowbit(x:longint):longint; begin exit(x and -x); end; procedure add(x:longint); begin while x<=k do begin inc(h[x]); inc(x,lowbit(x)); end; end; function sum(x:longint):longint; begin sum:=0; while x>0 do begin inc(sum,h[x]); dec(x,lowbit(x)); end; end; begin readln(n); for i:=1 to n do begin read(a[i]); d[i]:=i; end; for i:=1 to n do begin read(b[i]); f[i]:=i;end; qt1(1,n); qt2(1,n); for i:=1 to n do e[d[i]]:=f[i]; k:=0; for i:=1 to n do if k<e[i] then k:=e[i]; for i:=1 to n do begin add(e[i]); tot:=tot-sum(e[i])+i; end; writeln(tot mod 99999997); end.
喜欢就收藏一下,vic私人qq:1064864324,加我一起讨论问题,一起进步^-^