對第一關鍵字排序,分治每朵花,合併的時候通過歸併左右的花的第二關鍵字,將值插入樹狀陣列中求值。對於相同的花,先進行預處理即可。
#include"bits/stdc++.h"
#define lowbit(x) ((x)&-(x))
using namespace std;
const int n=100005,m=200005;
int n,m;
int sum[m];
inline void add(int x,int op)
inline int qry(int to)
int x[n],y[n],z[n],id[n],ans[n],res[n];
inline bool cmp(const int&a,const int&b)
while(i>l)add(z[id[--i]],-1);
static int ms[n],tmp;tmp=l-1;
for(i=l,j=mid+1;i<=mid||j<=r;){
if(i>mid) ms[++tmp]=id[j++];
else if(j>r||y[id[i]]
BZOJ 3262 陌上花開 CDQ
time limit 20 sec memory limit 256 mb submit 2457 solved 1098 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數...
bzoj 3262 陌上花開(cdq分治)
time limit 20 sec memory limit 256 mb submit 1431 solved 644 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量...
BZOJ 3262 陌上花開 CDQ分治
最近又研究了一下cdq分治,發現比樹套樹好寫多了啊。首先cdq分治只能優化掉一維,對於乙個三維問題,cdq分治先二分第一維,然後通過sort第二維後由左到右掃瞄確保第二維的順序,第三維則需要乙個計數的資料結構維護,一般是樹狀陣列或者線段樹,然後就完美地解決掉了問題。而對於cdq遞迴時,可以採用先序遍...