取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 ...