同時,這個數也是通過交換相鄰的元素讓這個序列變成不下降序列所需要的最小次數。
s:
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
5e5+
10, mod =
1e9+7;
int n, bit[maxn]
, dis[maxn]
;ll a[maxn]
;//add只用執行+1操作
void
add(
int x)
}ll query
(int x)
return sum;
}//把下標x和y按照在原序列中的大小從大到小排序
//於是在下標p之前大於a[p]的數的個數可以直接用字首和求出
//穩定排序,不改變相同的數之間的相對順序,這裡我相當於是把原陣列翻轉了
bool
cmp(
const
int&x,
const
int&y)
intmain()
printf
("%lld\n"
, ans)
;return0;
}
洛谷 P1908 逆序對(樹狀陣列,離散化)
求大小為n的陣列中有多少個逆序對。因為n 1e5,但是a n 1e9,而且這道題和每乙個a i 的具體數值並沒有任何關係,所以我們要用到離散化思想,將a n 中的數字排序後重新賦值。之後就是正常的樹狀陣列求逆序對方法。include using namespace std define int lo...
樹狀陣列 (離散化 樹狀陣列 求逆序對)
sample test s input 52 3 1 5 4 output 3 題目大意 求逆序對的個數 題目分析 求逆序對有很多方法,比如說用合併排序 分治 樹狀陣列 線段樹,甚至連暴力 氣泡排序 也可以做,但是要注意會不會超時。這裡就講一下樹狀陣列的方法,這一題最有意思的是離散化的方法,這個方法...
逆序對 離散樹狀陣列
求逆序對有三種以上方法 1 離散樹狀陣列,2 線段樹,3 歸併排序 今天做了下洛谷的p1908逆序對 1 一開始用樹狀陣列,一直re,後來在發現自己一直忽略離散化。include include using namespace std const int maxn 400000 5 typedef ...