離散化的樹狀陣列:
這裡就提一下和普通樹狀陣列的區別,這裡是用要查詢的數當作下標,而普通樹狀陣列是直接順序下標放值,也就是說區別在於
updata函式,普通的是updata(i,k);//這裡的i就單純是區間下標;而求逆序對的時候是updata(a[i],1)。我們每次都是在這個數字大小的位置上新增1,然後去更新樹狀陣列,在計算逆序數的時候,只需要檢視一下比這個數小或等於的數有多少個,然後現在的位數減去前面比它小的就是所得這一位的逆序數。所有如果要判斷的值過大,就要離散處理了。
#includeusing namespace std;
const int maxn=1000000;
int c[maxn];
int n;
int lowbit(int x)
void updata(int pos,int k)
int getsum(int x)
return ans;
}int main()
cout
}
樹狀陣列 (離散化 樹狀陣列 求逆序對)
sample test s input 52 3 1 5 4 output 3 題目大意 求逆序對的個數 題目分析 求逆序對有很多方法,比如說用合併排序 分治 樹狀陣列 線段樹,甚至連暴力 氣泡排序 也可以做,但是要注意會不會超時。這裡就講一下樹狀陣列的方法,這一題最有意思的是離散化的方法,這個方法...
樹狀陣列求逆序對及離散化
樹狀陣列求逆序對及離散化 逆序對指的是乙個序列中有兩個數ai和aj,iaj,即它們下標與數值的增減不一致,那麼對於這個問題 求乙個序列中逆序對的個數,該如何解決呢?我最初接觸到的方法是歸併排序,是個很不錯的方法,但是對於向我一樣的蒟蒻 還是有理解難度,而今天講的樹狀陣列解法,至少 理解難度降低了不少...
樹狀陣列求逆序對 離散化 poj2299
今天做了乙個樹狀陣列求逆序對的題,需要離散化,看了部落格明白了為什麼要進行離散化,原因是樹狀陣列中的c maxn 陣列其實相當於乙個雜湊操作,如果所給陣列中存在值特別大的元素,陣列就需要離散化 include include include include using namespace std s...