hdu 2838 樹狀陣列水題

2021-06-28 03:39:55 字數 1045 閱讀 5658

提議是給你乙個序列   讓你調整把它變成 從小到大排列的有序序列    沒調動兩個為兩權值之和   問最小的權值和是多少

給個數列   1 4 2 3 5      對每乙個位置數   需要交換的比為前面比它大的數  或後面比它小的數(包含了最小值在裡面了)     比如pi前面有5個數比它大   則就需要把這5個數和pi交換   交換的權值就是這5個數的和再加上5*pi      庵後對每個數都這樣求就為最後結果      我是把它倒過來然後按求逆序數的方式 求     有兩個更新和查詢

cont表示前面比它小的個數   sum表示前面比它小的數的和;

#include#include#includeusing namespacestd;

intn,cont[100010],num[100010];

__int64sum[100010];

intupdate(

inta,

intb)

intadd(

inta,

intb)

__int64find1(

inta)

__int64find2(

inta)

intmain

()printf("%i64d\n",sum);

}return0;

}

樹狀陣列 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...