最接近神的人 洛谷p1774 逆序對三種求法

2021-10-21 02:21:38 字數 1431 閱讀 8347

題目位址

下面兩種方法均先處理離散化。

求逆序對,倒序插入:插入乙個,統計比它小的數量,即ask(1,a[i]-1)。

順序也行ask要變

#include

#include

#include

using

namespace std;

const

int n =

5e5+10;

typedef

long

long ll;

#define lowbit(x) (x & -x)

ll c[n]

,a[n]

,n;vector b;

intfind

(int x)

void

update

(int x,

int v)

intask

(int x)

intmain()

cout

}

維護區間的和,插入乙個後,統計比它(大/小的數量)看順序還是逆序。

#include

#include

#include

using

namespace std;

const

int n =

5e5+10;

typedef

long

long ll;

ll a[n]

,n;vector b;

#define l(x) t[x].l

#define r(x) t[x].r

#define ans(x) t[x].ans

struct segmenttreet[n*4]

;int

find

(int x)

void

push_up

(int p)

void

build

(int p,

int l,

int r)

void

update

(int p,

int x,

int v)

int mid =(l

(p)+

r(p)

)>>1;

if(x <= mid)

update

(p*2

,x,v)

;else

update

(p*2+1

,x,v)

;push_up

(p);

}ll ask

(int p,

int l,

int r)

intmain()

cout

}

洛谷P1774 最接近神的人

用類似於桶的方法,樹狀陣列記錄原序列的某位置之前已經插入了多少個數,插入時樹狀陣列單點加1即可 先排一遍序,從大到小插入所有數在原序列的位置,統計每次插入時,在該元素前面元素的個數,前面的元素是先插入的,比該元素大,而在序列中的位置靠前,所以這個字首和是逆序對數 include include in...

P1774 最接近神的人

這個人當然是我啦,皮 破解了符文之語,小ff開啟了通往地下的道路。當他走到最底層時,發現正前方有一扇巨石門,門上雕刻著一幅古代人進行某種活動的圖案。而石門上方用古代文寫著 神的殿堂 小ff猜想裡面應該就有王室的遺產了。但現在的問題是如何開啟這扇門 仔細研究後,他發現門上的圖案大概是說 古代人認為只有...

洛谷P1298 最接近的分數

給出乙個正小數,找出分子 非負 不超過m,分母不超過n 正數 的最簡分數或整數,使其最接近給出的小數。最接近 是指在數軸上該分數距離給出的小數最近,如果這個分數不惟一,輸出 too many 輸入格式 輸入檔案共有二行,第一行包含兩個用空格隔開的正整數m和n 1 m,n 107 表示要求的分數其分子...