[Vijos P1842] Noip2013Day1T2
2014-09-02 13:07
134 查看
嗯刚A了它~
就是先排个序,然后搞他们应该在哪个位置上,然后求逆序对
Code:
就是先排个序,然后搞他们应该在哪个位置上,然后求逆序对
Code:
const maxm=99999997; type pppp=record num,old:longint; end; var a,b:array[0..1000000] of pppp; hash,step:array[0..1000000] of longint; i,j,k,n,ans:longint; t:pppp; procedure init; begin readln(n); for i:=1 to n do begin read(a[i].num); a[i].old:=i; end; for i:=1 to n do begin read(b[i].num); b[i].old:=i; end; end; procedure qsort(l,r:longint); var i,j,mid:longint; begin i:=l;j:=r;mid:=a[(i+j) div 2].num; repeat while (a[i].num<mid) do inc(i); while (a[j].num>mid) do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if j>l then qsort(l,j); if i<r then qsort(i,r); end; procedure qsort1(l,r:longint); var i,j,mid:longint; begin i:=l;j:=r;mid:=b[(i+j) div 2].num; repeat while (b[i].num<mid) do inc(i); while (b[j].num>mid) do dec(j); if i<=j then begin t:=b[i]; b[i]:=b[j]; b[j]:=t; inc(i); dec(j); end; until i>j; if j>l then qsort1(l,j); if i<r then qsort1(i,r); end; procedure merge(l,r:longint); var i,j,k,mid:longint; begin if l>=r then exit; mid:=(l+r) shr 1; merge(l,mid); merge(mid+1,r); i:=l; j:=mid+1; k:=l; repeat if hash[i]>hash[j] then begin step[k]:=hash[j]; ans:=(ans+(mid-i+1)) mod maxm; inc(k); inc(j); end else begin step[k]:=hash[i]; inc(k); inc(i); end; until ((i>mid) or (j>r)); while (i<=mid) do begin step[k]:=hash[i]; inc(i); inc(k); end; while (j<=r) do begin step[k]:=hash[j]; inc(j); inc(k); end; for i:=l to r do hash[i]:=step[i]; end; procedure main; begin init; qsort(1,n); qsort1(1,n); for i:=1 to n do hash[a[i].old]:=b[i].old; merge(1,n); writeln(ans); end; begin main; end.
相关文章推荐
- vijos P1842火柴排队 (树状数组求逆序对)
- NOIP 提高组2013 火柴排队 (Vijos P1842)
- 我解Vijos Guest题目系列:前言
- vijos 1446 最短路上统计点的总个数
- 新年趣事之打牌----VIJOS_1071----01背包加强版
- vijos P1001 谁拿了最多奖学金
- vijos p1091(环球旅行)
- vijos 1049 送给圣诞夜的礼品
- Hoj 3140\ Vijos 1775 乌龟棋
- 【vijos1067】【矩阵乘法】守望者的烦恼
- vijos 1014 旅行商简化版(多路DP)
- Vijos 1034 家族
- VIJOS-P1344(计算器改良版)
- VIJOS 1792 摆花
- Vijos P1844(积木大赛-贪心)
- vijos1100 加分二叉树 ( dp)
- 【Vijos】1218 数字游戏
- vijos1011题解
- 【vijos1659】 河蟹王国
- Vijos P1493 传纸条 (双线程DP)