luogu1966 火柴排隊 離散化 樹狀陣列

2022-04-30 00:45:15 字數 766 閱讀 8395

由於是乙個二次函式的關係,所以易證應該盡量讓兩組的順序相同

然後就離散化亂搞幾發,最後就變成了求逆序對的數量了

1 #include2

#define pa pair3

#define ll long long

4using

namespace

std;

5const

int maxn=100010,mod=99999997;6

7inline ll rd()

10while(c>='

0'&&c<='

9') x=x*10+c-'

0',c=getchar();

11return x*neg;12}

1314

intn;

15pa h1[maxn],h2[maxn];

16int

nh[maxn],rank[maxn];

17int

tr[maxn];

1819 inline int lowbit(int x)

2021 inline void add(int x,int

y)24 inline int query(int

x)27

28int

main()for(i=1;i<=n;i++)int ans=0;39

for(i=n;i;i--)printf("

%d\n

",ans);

43return0;

44 }

luogu1966 火柴排隊

題目描述 涵涵有兩盒火柴,每盒裝有 n 根火柴,每根火柴都有乙個高度。現在將每盒中的火柴各自排成一列,同一列火柴的高度互不相同,兩列火柴之間的距離定義為 ai bi 2 其中 ai 表示第一列火柴中第 i 個火柴的高度,bi 表示第二列火柴中第 i 個火柴的高度。每列火柴中相鄰兩根火柴的位置都可以交...

題解 LuoGu1966 火柴排隊

原題傳送門 首先可以證明,兩列火柴中高度排名相等的火柴必須排在上下相鄰的兩個 證明略然後把第乙個序列中的排名對映到第二個序列中 然後問題轉化,轉化成求逆序對數 用樹狀陣列 code include define maxn 100010 define qy 99999997 using namespa...

1966 火柴排隊

難度 提高 省選 題目型別 貪心 分治 提交次數 5 涉及知識 逆序對 離散化 涵涵有兩盒火柴,每盒裝有 n 根火柴,每根火柴都有乙個高度。現在將每盒中的火柴各自排成一列,同一列火柴的高度互不相同,兩列火柴之間的距離定義為 ai bi 2 其中 ai 表示第一列火柴中第 i 個火柴的高度,bi 表示...