給定乙個正整數序列a,試求這個序列的逆序對的個數。所謂逆序對,即為序列a中的兩個不同的元素
i, aj > i, aj > 組成的數對。 其滿足:i i< j和 ai >a ja _ >a _ ai >a j 。 例如序列。它有
3, a4 > 3, a4 > ,
3, a5 > 3, a5 > 110101 101100 11 解法1:樹狀陣列求逆序對o(l og(n )∑le n) o(log(n)\sum) o(log( n)∑l en) #include #include #include #include using namespace std; typedef long long ll; const int n= 1e5+ 100; string a[n] ;int d[n] ;vectorv; int n; intlowbit (int x) void add( int x, int a) }ll ask (int x) return res; }int find (string s) intmain() sort (v.begin() ,v.end() );v.erase (unique (v.begin() ,v.end() ),v. end()) ;for (int i=n;i>= 1;i-- )printf ("%lld\n" , ans) ;return0; }解法二:字典樹 o(∑ len) o(\sum) o(∑len ) 假設要求s=101011101前面的大於s的數x的個數,肯定是與s對等位上s[i]=0&&x[i]=1的個數之和。511
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
1.5e7+10
;struct node
}trie[n][2
];char s[
200]
, t[
200]
;int n;
ll ans,tot=1;
intmain()
int p =1;
for(
int k =
0; k <
150; k++
) trie[p]
[ch]
.data++
; p = trie[p]
[ch]
.id;
if(p ==0)
break;}
}printf
("%lld\n"
, ans)
;return0;
}
排位賽題解
十進位制轉二進位制,右移 與 運算結合,遍歷每個數字在二進位制下點每一位。include intmain for int i 0 i 4 i for int i 0 i 4 i a i 1 右移除2 printf d d d d n num 0 num 1 num 2 num 3 return0 題...
排位賽一 E Milk Visits
farmer john 計畫建造 n 個農場,用 n 1 條道路連線,構成一棵樹 也就是說,所有農場之間都互相可以到達,並且沒有環 每個農場有一頭奶牛,品種為更賽牛或荷斯坦牛之一。farmer john 的 m 個朋友經常前來拜訪他。在朋友 i 拜訪之時,farmer john 會與他的朋友沿著從農...
排位賽二G Bucket Brigade
給定乙個10x10的地圖,b是倉庫,l是湖泊,是路,r是石頭 石頭不能走 現在倉庫著火了,母牛哥要去救火了,求倉庫到湖泊的最小步數 倉庫和湖泊不算入步數 bfs模板題。include include include include include include using namespace st...