提議是給你乙個序列 讓你調整把它變成 從小到大排列的有序序列 沒調動兩個為兩權值之和 問最小的權值和是多少
給個數列 1 4 2 3 5 對每乙個位置數 需要交換的比為前面比它大的數 或後面比它小的數(包含了最小值在裡面了) 比如pi前面有5個數比它大 則就需要把這5個數和pi交換 交換的權值就是這5個數的和再加上5*pi 庵後對每個數都這樣求就為最後結果 我是把它倒過來然後按求逆序數的方式 求 有兩個更新和查詢
cont表示前面比它小的個數 sum表示前面比它小的數的和;
#include#include#includeusing namespacestd;int
n,cont[100010],num[100010];__int64
sum[100010];int
update(int
a,int
b)int
add(int
a,int
b)__int64
find1(int
a)__int64
find2(int
a)intmain
()
printf("%i64d\n",sum);}return
0;}
樹狀陣列 hdu2689 hdu2838
題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...
hdu 1594 樹狀陣列 水題
思路 乙個座標的level和它的y座標是無關的,因為x和y都是公升序leve給出的,乙個座標的level只和前面所有的x有關,那麼可以抽象這麼乙個a陣列 實際上是不存在的,只是抽象出來 每輸入乙個x,就對a x 1 因為有0 當前a 1 a x 1 的和就是該座標的level,那麼這個a陣列就可以用...
HDU 4417 水題 樹狀陣列
題目大意 給n個數字,m個詢問 每次詢問 l,r 區間的數字,比k小的數字有多少個。下標從0 n 1 直接離線後樹狀陣列,聽說劃分樹也能過 略微更新的我的破爛離散化小板子 include using namespace std define pr x cout x vectormp maxn voi...