luogu_3810
就是將逆序對轉化到了三維上去
原理等我寒假再補
第一維sort解決
第二維並歸排序(cdq)解決
第三維樹狀陣列
// luogu-judger-enable-o2
#include #include #include #include using std::sort;
const int maxn=101000;
const int max=201000;
struct node
};node q[maxn],tmp[maxn];
int base[max],t[max],len,tim;
int tot[max<<1];
int n,m;
void add(int pos,int val,int t)
base[pos]+=val;
pos+=(pos&(-pos));
}return ;
}int sum(int pos,int t)
res+=base[pos];
pos-=(pos&(-pos));
}return res;
}bool compare(const node &a,const node &b)
else
}while(q<=mid) tmp[o++]=q[q++];//將沒有處理的元素壓回tmp
while(p<=r)
for(int i=0;ireturn ;
}int main()
else pas++;
}cdq(1,t);
for(int i=1;i<=t;i++) tot[q[i].ans+q[i].size-1]+=q[i].size;
for(int i=0;i}
陌上花開(三維偏序)(cdq分治)
其實就是三位偏序的模板,cdq分治入門題。學習cdq分治請看 stdcall大佬的部落格 傳送門 排序來維護第一層,cdq維護一層,樹狀陣列維護一層,然後就沒有啦qwqwq include include include include include define maxn 100010 usin...
bzoj2683 簡單題 三維偏序cdq分治
給定乙個n n n n n 1e5 n 1 e5 的矩陣,單點修改,區間查詢。二維樹狀陣列?空間開不下。那就換乙個辦法,記得之前用cdq分治來做樹狀陣列的時候,每乙個查詢的答案是在它前面的修改的並且修改的位置在它前面的才可以計入答案,這裡也是一樣,將每乙個詢問拆成四個字首和陣列之後,每乙個查詢的答案...
二維三維偏序
一維偏序 就是排序,二維偏序 排序 樹狀陣列 例題 給定 n 個點 x,y 定義每個點的等級是在該點左下方 含正左 正下 的點的數目,試統計每個等級有多少個點。題目鏈結 分析 對於二維偏序 對1維x進行排序,那麼在右邊的點不會對左邊的點有貢獻。然後對y建立樹狀陣列。計算0 y的和,就是sum y i...