#include #include #include #include #include using namespace std;
#define lowbit(x) (x&(-x))
const int maxn=3000030;
const int maxc=10010;
int n,c[maxc],a[maxn];
void add(int x,int val)
a[q]=t;
/*for(i=0;icout
return 0;}/*
樹狀陣列
用樹狀陣列計算每個a[i],存在多少個j(0<=j而在後面的r過程中,只是將區間[p,q]的數迴圈左移一位,對於區間[0,p-1],[p+1,n-1]的正序數無影響。
所以只要計算[p,q]區間的正序數改變值,而在區間[p,q]中,[p+1,q]中的數都只是左移,正序數不變。那就只要計算a[p]移到a[p]位置所改變的值。
a[p]移到a[q]位置,就要加上[p+1,q]中比a[p]小的,減去比a[p]大的就可以了。區間長只有<=1000,可以暴力來求
*/
hdu 2688 Rotate 樹狀陣列
題目連線 hdu 2688 rotate 題意 給你n數,n 3e6 有兩個操作,q為 當前有多少對數,滿足嚴格遞增,r l,r為旋轉l,r這個區間的數 題解 求嚴格遞增的順序對我們可以反向用樹狀陣列求逆序對,300w的資料還是有點夠嗆,不過這裡求出來也就nlogn,然後對於旋轉操作,因為區間大小不...
hdu 4998 Rotate(計算幾何)
解題思路 題目大意 給定n個點和n個角度,平面內任意乙個點依次以這些點point i 為旋轉中心,逆時針旋轉 r i 度,求最後相當於繞哪個點旋轉多少度,求這個點的座標以及旋轉的角度。演算法思想 乙個點 x,y 繞另外乙個點 x0,y0 旋轉 r0 度的公式為 x1 x x0 cos r0 y y0...
樹狀陣列 hdu2689 hdu2838
題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...