原來放過這道題目,題面在這裡
樹套樹的做法也請點上面
這回用cdq分治做的
其實也很簡單,
對於第一維排序之後
顯然只有前面的對後面的才會產生貢獻
那麼,使用cdq分治
先分,每次遞迴子問題
合併的時候每次考慮前面的對於後面的貢獻
最後統計一下答案
如果在清空樹狀陣列的時候用了memset會tle
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define max 110000
inline
int read()
int c[max<<1],n,k;
int ans[max];
struct tnodet[max];
bool
operator
<(tnode x,tnode y)
bool cmp(tnode x,tnode y)
inline
void add(int x,int w)
inline
int getsum(int x)
void cdq(int l,int r)
t[j].ans+=getsum(t[j].c);
}for(int j=l;j//memset(c,0,sizeof(c));
}int main()
int n=n;
n=tot;
cdq(1,n);
for(int i=1;i<=n;++i)ans[t[i].ans+t[i].w-1]+=t[i].w;
for(int i=0;iprintf("%d\n",ans[i]);
return
0;}
BZOJ 3262 陌上花開 CDQ
time limit 20 sec memory limit 256 mb submit 2457 solved 1098 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數...
BZOJ3262 陌上花開 CDQ分治
對第一關鍵字排序,分治每朵花,合併的時候通過歸併左右的花的第二關鍵字,將值插入樹狀陣列中求值。對於相同的花,先進行預處理即可。include bits stdc h define lowbit x x x using namespace std const int n 100005,m 200005...
bzoj 3262 陌上花開(cdq分治)
time limit 20 sec memory limit 256 mb submit 1431 solved 644 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量...