noip2013 d1t2 火柴排隊

2022-05-20 04:14:42 字數 1031 閱讀 6027

看不出是逆序對...感覺藥丸

首先要看出最優解就是兩個陣列均有序的時候

再對兩個陣列的下標求逆序對即可

歸併&樹狀陣列

1 #include2 #include3 #include4 #include5 #include6

#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()

view code

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去處理...