P2345 奶牛集會(樹狀陣列 CDQ分治)

2021-10-01 18:31:44 字數 2459 閱讀 3700

題目描述

約翰的n 頭奶牛每年都會參加「哞哞大會」。哞哞大會是奶牛界的盛事。集會上的活動很多,比如堆乾草,跨柵欄,摸牛仔的屁股等等。它們參加活動時會聚在一起,第i 頭奶牛的座標為xi,沒有兩頭奶牛的座標是相同的。奶牛們的叫聲很大,第i 頭和第j 頭奶牛交流,會發出max×|xi − xj | 的音量,其中vi 和vj 分別是第i 頭和第j 頭奶牛的聽力。

假設每對奶牛之間同時都在說話,請計算所有奶牛產生的音量之和是多少。

輸入格式

• 第一行:單個整數n,1 ≤ n ≤ 20000

• 第二行到第n + 1 行:第i + 1 行有兩個整數vi 和xi,1 ≤ vi ≤ 20000; 1 ≤ xi ≤ 20000

輸出格式

• 單個整數:表示所有奶牛產生的音量之和

題解:我們可以先按v排序,然後用樹狀陣列維護比該牛x小的數的個數,以及它們的和

開兩個樹狀陣列,乙個維護比當前牛x小的數的個數,乙個維護比牛x小的數的總和

然後就可以化簡絕對值公式了,加入當前牛造成的貢獻就為:

a [i

].v∗

(l∗a

[i].

x−ls

um+r

sum−

r∗a[

i].x

)a[i].v*(l*a[i].x-lsum+rsum-r*a[i].x)

a[i].v

∗(l∗

a[i]

.x−l

sum+

rsum

−r∗a

[i].

x)ac**:

#pragma gcc optimize(2)

#include

#include

#define int long long

using

namespace std;

using

namespace __gnu_cxx;

typedef

long

long ll;

const

int maxn =

20010

;const

int mod =

1e9+7;

const

int inf =

0x3f3f3f3f

;int n,res;

struct nodea[maxn]

;inline

bool

cmp(node a,node b)

struct bit

inline

void

add(

int x,

int val)

inline

intquery

(int x,

int res=0)

}t1,t2;

signed

main()

cout<'\n'

;return0;

}

ac**(cdq分治):

#pragma gcc optimize(2)

#include

#include

#define int long long

using

namespace std;

using

namespace __gnu_cxx;

typedef

long

long ll;

const

int maxn =

20010

;const

int mod =

1e9+7;

const

int inf =

0x3f3f3f3f

;int n,res;

struct nodea[maxn]

,b[maxn]

;inline

bool

cmp(node a,node b)

inline

void

cdq(

int l,

int r)

res +

= a[i]

.v*(a[i]

.x*(tot-l)

-sum2-a[i]

.x*(mid-tot+1)

+sum1);}

int p=l,q=mid+

1,cnt=l;

while

(p<=mid && q<=r)

while

(p<=mid) b[cnt++

]=a[p++];

while

(q<=r) b[cnt++

]=a[q++];

for(

int i=l;i<=r;i++

) a[i]

=b[i];}

signed

main()

P2345 奶牛集會(樹狀陣列)

moofest,2004 open 約翰的n 頭奶牛每年都會參加 哞哞大會 哞哞大會是奶牛界的盛事。集會上的活動很 多,比如堆乾草,跨柵欄,摸牛仔的屁股等等。它們參加活動時會聚在一起,第i 頭奶牛的座標為xi,沒有兩頭奶牛的座標是相同的。奶牛們的叫聲很大,第i 頭和第j 頭奶牛交流,會發出max x...

P2345 奶牛集會(樹狀陣列or模擬)

moofest,2004 open 約翰的n 頭奶牛每年都會參加 哞哞大會 哞哞大會是奶牛界的盛事。集會上的活動很 多,比如堆乾草,跨柵欄,摸牛仔的屁股等等。它們參加活動時會聚在一起,第i 頭奶牛的座標為xi,沒有兩頭奶牛的座標是相同的。奶牛們的叫聲很大,第i 頭和第j 頭奶牛交流,會發出max x...

P2345 奶牛集會

約翰的n 頭奶牛每年都會參加 哞哞大會 哞哞大會是奶牛界的盛事。集會上的活動很多,比如堆乾草,跨柵欄,摸牛仔的屁股等等。它們參加活動時會聚在一起,第i 頭奶牛的座標為xi,沒有兩頭奶牛的座標是相同的。奶牛們的叫聲很大,第i 頭和第j 頭奶牛交流,會發出max xi xj 的音量,其中vi 和vj 分...