UVA 1428 Ping Pong 樹狀陣列

2021-07-23 21:36:25 字數 773 閱讀 7281

取low=min(a[i]|1<=i<=n},up=max(a[i]|1<=i<=n},那麼區間就是,那麼只要統計出當前a[i]左邊有多少比他小的,右邊有多少比他小的即可,因為給出的序列是有順序的,所以在加入需要加入乙個統計乙個,如果先全部加入了,那麼則會導致統計結果變大。

#include#include#include#includeusing namespace std;

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define ret(i,a,b) for(int i=(a);i>=(b);i--)

#define ss(x) scanf("%d",&x)

const int maxn=100000+5;

int a[maxn],c[maxn],c[maxn],d[maxn];

int n,up;

int lowbit(int x)

void add(int x,int d)

}int sum(int x)

return ret;

}int main()

rep(i,1,n)

memset(c,0,sizeof(c));

ret(i,n,1)

long long ans=0;

rep(i,1,n) ans+=c[i]*(n-i-d[i])+(i-1-c[i])*d[i];

printf("%lld\n",ans);

}return 0;

}

UVA1428 Ping pong 樹狀陣列

uva1428 ping pong 樹狀陣列 題目鏈結 題目大意 有n個人,每個人都有乙個技能值ai,現在要開展桌球比賽,要求要有兩個選手和乙個裁判,要求裁判需要在兩名選手的中間而且技能值也是在兩名選手的中間,問可以開展多少場比賽。解題思路 對於第i個選手當裁判的話,設它前面位置的選手有ci個技能值...

uva 1428 Ping pong (樹狀陣列)

題意 一條街道上有n個選手,他們要打桌球賽,每個人有乙個自己的skill rank,且是n個不同的數。每場比賽需要乙個裁判,要求這個裁判的skill rank不能高於也不能低於這兩個選手,且在街上住的位置必須在兩個選手之間。問可以組織多少場比賽。開始想到了可以用樹狀陣列處理每個人前面有多少sr sk...

UVA1428 Ping pong 樹狀陣列

傳送門 思路 權值樹狀陣列。考慮列舉每個位置作為裁判對答案的貢獻。顯然有兩種情況 1.a l i r l i r1.a l 1.a l i r l i2.a l a i a r l i r2.a l a i a r l2.a l a i a r l i因為每個數互異。根據乘法原理所以貢獻為 llo ...