luogu3242 接水果 整體二分 樹狀陣列

2022-04-29 21:03:11 字數 2474 閱讀 3526

考慮整體二分,問題就變成了每個(水果)路徑有多少個滿足條件(權值)的(盤子)子路徑

考慮乙個盤子(a,b)表示兩端點(不妨設dfn[a]1.如果a是b的祖先,則u在(a的在(b,a)鏈上的孩子)這個子樹外,v在b子樹內

2.否則,u在a的子樹內,v在b的子樹內

那麼把乙個水果(a,b)看成是乙個二維點(dfn[a],dfn[b]),對於每個盤子,就是做乙個二維區間+1

差分以後變成乙個二維數點問題,可以先按x排序,y用樹狀陣列來解決

複雜度$o(nlog^2n)$

然而我寫的常數過大哪都卡不過去

1 #include2

#define clr(a,x) memset(a,x,sizeof(a))

3#define mp make_pair

4using

namespace

std;

5 typedef long

long

ll;6 typedef unsigned long

long

ull;

7 typedef pairpa;

8const

int maxn=4e4+10,maxp=1e7+10;9

10inline ll rd()

13while(c>='

0'&&c<='

9') x=x*10+c-'

0',c=getchar();

14return x*neg;15}

1617

intn,p,q;

18int eg[maxn*2][2

],egh[maxn],ect;

19int dfn[maxn][2

],tot;

20int rt[maxn],fa[maxn][20

],dep[maxn];

21int

tr[maxn];

2223 inline int lowbit(int x)

2425 inline void add(int x,int

d)28 inline int query(int

x)33

34 inline void adeg(int a,int

b)37

38 inline void dfs(int

x)42 dfn[x][0]=++tot;

43for(int i=egh[x];i;i=eg[i][1

])dfn[x][1]=tot;48}

4950 inline int jump(int x,int

d)return

x;54}55

56int

ans[maxn],nct;

57pa val[maxn];

58struct

nodeop[maxn*9],tmp[maxn*9

];61

62 inline void addnode(int x1,int x2,int y1,int y2,int v,int

i);64

if(x21,y2+1,1

,v,i};

65if(x21,y1,-1

,v,i};

66if(y21,-1

,v,i};67}

6869 inline void cover(int a,int b,int v,int

i)else78}

7980 inline void solve(int l,int r,int ql,int

qr)else tmp[--q]=op[i];

91 }else

else

if(n100}

101102

}103

for(int i=l;i<=r;i++)

108}

109}

110for(int i=l;i<=p;i++) op[i]=tmp[i];

111for(int i=q;i<=r;i++) op[r-i+q]=tmp[i];

112 solve(l,p,ql,m-1),solve(q,r,m+1

,qr);

113}

114115 inline bool cmp(node a,node b)

116117

intmain()

126 dep[1]=1;dfs(1

);127

for(i=1;i<=p;i++)sort(val+1,val+p+1

);132

for(i=1;i<=q;i++);

136}

137 sort(op+1,op+nct+1

,cmp);

138 solve(1,nct,1

,p);

139for(i=1;i<=q;i++) printf("

%d\n

",ans[i]);

140return0;

141 }

接水果 fruit 整體二分 掃瞄線

題目描述 風見幽香非常喜歡玩乙個叫做 osu 的遊戲,其中她最喜歡玩的模式就是接水果。由於她已經 dt fc 了 the big black,她覺得這個遊戲太簡單了,於是發明了乙個更加難的版本。首先有乙個地圖,是一棵由 n 個頂點 n 1 條邊組成的樹 例如圖 1 給出的樹包含 8 個頂點 7 條邊...

BZOJ4009 接水果(整體二分,掃瞄線)

為什麼這都是許可權題?洛谷真良心 看到這道題,感覺就是主席樹 整體二分之類的東西 因為要求第 k 大 但是,讀完題目之後,我們發現路徑之間的包含關係很不好搞 那麼,我們來畫畫圖 這是第一種情況,lc a不是u,v u,v 分別是乙個盤子的兩端 如果被乙個水果完全覆蓋,那麼,這個水果的兩端分別在u,v...

POJ2104 主席樹 整體二分

題目鏈結 kth number 主 席樹 主席樹主席 樹主席樹模板題 關於主席樹沒啥好講的,其實就是動態開點 線段樹 pragma gcc optimize 2 include include include using namespace std typedef long long ll cons...