HAOI2004 數列 樹狀陣列

2021-07-26 16:44:15 字數 1186 閱讀 5053

乙個簡單的數列問題:給定乙個長度為n的數列,求這樣的三個元素ai, aj, ak的個數,滿足ai < aj > ak,且i < j < k。

第一行是乙個整數n(n <= 50000)。

第二行n個整數ai(0 <= ai <= 50000)。

乙個數,滿足ai < aj > ak (i < j < k)的個數。

5 1 2 3 4 1

用樹狀陣列求出二元組以及逆序對。

用乘法原理相乘就是答案。

注意離散化

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

inline

const ll get_int()

while(x>='0'&&x<='9')

return num*bj;

}const

int maxn=50005;

struct bit

void init(int n)

void add(int x,ll v)

ll sum(int x)

} bit;

ll n,a[50005],b[50005],f1[50005],f2[50005],ans;

mapm;

map::iterator it;

void discretization()

int main()

discretization();

//統計小的二元組

bit.init(n);

for(int i=1; i<=n; i++)

//統計大的二元組(逆序對)

bit.init(n);

for(int i=n; i>=1; i--)

for(int i=1; i<=n; i++)ans+=f1[i]*f2[i];

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

return

0;}

HAOI 2009 逆序對數列

haoi 2009 逆序對數列 對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的 數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?第一行為兩個整數n,k。寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你...

HAOI2009 逆序對數列

題目大意 求 1,n 的自然數的排列中逆序對數為 k 的有多少.無優化 include include const int mod 10000 int f 1005 1005 int main printf d n f n k return 0 優化 include include const in...

HAOI2009 逆序對數列

對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?輸入格式 第一行為兩個整數n,k。輸出格式 寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對...