考慮整體二分,問題就變成了每個(水果)路徑有多少個滿足條件(權值)的(盤子)子路徑
考慮乙個盤子(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...