乙個簡單的數列問題:給定乙個長度為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。輸出格式 寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對...