題目描述
在⼀條街道上有n個⼈,他們都喜歡打桌球。任意兩個⼈的家的位置都不相同,按順序標為1,2,…,n。每個⼈都有⼀定的⽔平,用兩兩不等的整數表示。
當兩個⼈想打球的時候,會找另⼀個⼈作為裁判,並到裁判家裡進⾏⼀場較量。出於某種原因,他們希望裁判的⽔平介於兩⼈之間;同時,他們希望兩個⼈到裁判家的總路程不超過兩個⼈的家的距離。
對於兩場較量,如果打球的兩個⼈不完全相同或者裁判不同,我們就認為這兩場較量不同。求不同的較量的總數。
輸入
輸⼊包含多組資料
輸⼊的第⼀⾏是⼀個整數t,表示資料組數;
每組資料佔⼀⾏,包含n+1個整數:n,a1,a2,···,an。其中a1,a2,···,an表示家位於相應位置的⼈的⽔平。
輸出
對每組資料,用⼀⾏輸出⼀個整數,表示不同的較量的總數。
樣例輸入
13 1 2 3
樣例輸出
1提示
對於40%的資料,有n≤1000;
對於所有資料,有t≤20,3≤n≤100000,每個⼈的⽔平都是不超過200000的正整數。
思路
對每乙個居民,分別求其的能力值大於多少居民的字首和和字尾和,列舉中間點,對於每個中間點,能組成一次比賽方式數量為l[i]*(n-i-r[i]);
與r[i]*(i-1-l[i]);
,總和即為答案
**實現
#pragma gcc optimize(3,"ofast","inline")
#include using namespace std;
typedef long long ll;
const int n=200005;
const ll mod=19960515;
ll l[n],r[n],sum[n],a[n];
inline int lowbit(int x)
void add(int p,int x)
ll search(int p)
void init()
int main()
memset(sum,0,sizeof(sum));
for(int i=n;i;i--)
ll ans=0;
for(int i=2;iprintf("%lld\n",ans);
}return 0;
}
問題 F 對戰 II
題目描述 在 條街道上有n個 他們都喜歡打桌球。任意兩個 的家的位置都不相同,按順序標為1,2,n。每個 都有 定的 平,用兩兩不等的整數表示。當兩個 想打球的時候,會找另 個 作為裁判,並到裁判家裡進 場較量。出於某種原因,他們希望裁判的 平介於兩 之間 同時,他們希望兩個 到裁判家的總路程不超過...
問題 F 對戰 II
題目描述 在 條街道上有n個 他們都喜歡打桌球。任意兩個 的家的位置都不相同,按順序標為1,2,n。每個 都有 定的 平,用兩兩不等的整數表示。當兩個 想打球的時候,會找另 個 作為裁判,並到裁判家裡進 場較量。出於某種原因,他們希望裁判的 平介於兩 之間 同時,他們希望兩個 到裁判家的總路程不超過...
樹狀陣列1 樹狀陣列入門
仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...