BZOJ3262 陌上花開(CDQ分治)

2021-08-13 06:46:18 字數 1068 閱讀 1748

原來放過這道題目,題面在這裡

樹套樹的做法也請點上面

這回用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 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量...