看不出是逆序對...感覺藥丸
首先要看出最優解就是兩個陣列均有序的時候
再對兩個陣列的下標求逆序對即可
歸併&樹狀陣列
1 #include2 #include3 #include4 #include5 #include6view code#define modd 99999997
7using
namespace
std;
8const
int maxn=100100;9
intn,ans;
10int
a[maxn],b[maxn];
11int
data[maxn];
12struct
nodestore[maxn];
15int
read()
22while
(isdigit(ch))
26return x*f;27}
28bool
cmp(node a,node b)
31void
init()
35 sort(store+1,store+n+1
,cmp);
36for (int i=1;i<=n;i++) a[i]=store[i].pos;
3738
for (int i=1;i<=n;i++)
41 sort(store+1,store+n+1
,cmp);
42for (int i=1;i<=n;i++) b[store[i].pos]=a[i]; 43}
44void merge(int l,int
r)57}58
while (p1<=mid) data[tot++]=b[p1++];
59while (p2<=r) data[tot++]=b[p2++];
60for (int i=l;i<=r;i++) b[i]=data[i];61}
62int
main()
NOIP2013 D1 T2火柴排隊
涵涵有兩盒火柴,每盒裝有 n 根火柴,每根火柴都有乙個高度。現在將每盒中的火柴各自排成一列,同一列火柴的高度互不相同,兩列火柴之間的距離定義為 ai bi 2 其中 ai 表示第一列火柴中第 i 個火柴的高度,bi 表示第二列火柴中第 i 個火柴的高度。每列火柴中相鄰兩根火柴的位置都可以交換,請你通...
NOIP2013D1T2 火柴排隊 題解
題目描述略 對於距離最小,其貪心策略為將兩序列公升序排序後比較。以下為簡易的證明 設對任意 a1 a2,b1 b2,第一種排布是 a1a2.b1b2.此時距離為 a1 b1 2 a2 b2 2 1 第二種排布是 a1a2.b2b1.此時距離為 a1 b2 2 a2 b1 2 2 用 1 式減去 2 ...
2013NOIP D1 T2 火柴排隊
題目點這裡 題目大意 有兩列火柴,給出他們的根數和他們對應的長度ai,bi,並且規定距離為 解題思路 怎麼使距離最小?哈哈哈哈,是在兩個佇列裡面的火柴相對應 a集合火柴中第i小對應b集合中第i小 將兩個集合排序 為了讓ab相對應 因為排好序a,b是最小的,所以a下標與b下標就要對應 然後按照a去處理...