日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ-2588-Count-on-a-tree-SPOJ10628-LCA+主席树

發(fā)布時(shí)間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ-2588-Count-on-a-tree-SPOJ10628-LCA+主席树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

描述

給定一棵N個(gè)節(jié)點(diǎn)的樹,每個(gè)點(diǎn)有一個(gè)權(quán)值,對(duì)于M個(gè)詢問(u,v,k),你需要回答u xor lastans和v這兩個(gè)節(jié)點(diǎn)間第K小的點(diǎn)權(quán)。其中l(wèi)astans是上一個(gè)詢問的答案,初始為0,即第一個(gè)詢問的u是明文。


分析

  • 想用樹鏈剖分但是發(fā)現(xiàn)不知道怎么套主席樹.
  • 正解是LCA, 只要維護(hù)根節(jié)點(diǎn)到每個(gè)結(jié)點(diǎn)u的權(quán)值線段樹. 因?yàn)橹飨瘶淝蟮趉大支持減法, 所以最終答案就是線段樹 u+v-lca(u,v)-fa[lca(u,v)] 中的第k大.
  • 調(diào)了半天發(fā)現(xiàn)在用lower_bound查找離散后的權(quán)值時(shí), unique后的T數(shù)組有序不假但重復(fù)元素被挪到了數(shù)組尾, 所以不能再用原來的T+n+1作為二分查找的上界了.

#include #include #include using namespace std;const int maxn = 100000 + 10; const int maxm = 3000000; const int DEP = 20;vectorG[maxn];int n, m, tot, node_cnt; int A[maxn], T[maxn]; int dep[maxn], fa[maxn][DEP]; int root[maxm], lc[maxm], rc[maxm], s[maxm];#define M (L+R>>1)void modify(int& x, int y, int L, int R, int d) {x = ++node_cnt;lc[x] = lc[y]; rc[x] = rc[y]; s[x] = s[y] + 1;if(L == R) return;if(d <= M) modify(lc[x], lc[y], L, M, d);else modify(rc[x], rc[y], M+1, R, d); }int query(int u, int v, int x, int y, int L, int R, int k) {if(L == R) return L;int ls = s[lc[u]] + s[lc[v]] - s[lc[x]] - s[lc[y]];if(k <= ls) return query(lc[u], lc[v], lc[x], lc[y], L, M, k);return query(rc[u], rc[v], rc[x], rc[y], M+1, R, k-ls); }void dfs(int u, int x) {dep[u] = dep[fa[u][0] = x] + 1;for(int i = 1; i < DEP; i++)if((1<<= dep[u]) fa[u][i] = fa[fa[u][i-1]][i-1]; else break; modify(root[u], root[x], 1, tot, A[u]); for(int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if(v != x) dfs(v, u); } } int lca(int x, int y) { if(dep[x] < dep[y]) swap(x, y); int delta = dep[x]-dep[y]; for(int i = 0; i < DEP; i++) if(delta&(1<= 0; i--) if(fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i]; return fa[x][0]; } int main() { int n, m; scanf("%d %d", &n, &m); for(int i = 1; i <= n; i++) { scanf("%d", &A[i]); T[i] = A[i]; } sort(T+1, T+n+1); tot = unique(T+1, T+n+1) - T-1; for(int i = 1; i <= n; i++) A[i] = lower_bound(T+1, T+tot+1, A[i]) - T; for(int i = 1; i < n; i++) { int u, v; scanf("%d %d", &u, &v); G[u].push_back(v); G[v].push_back(u); } dfs(1, 0); int ans = 0; for(int i = 1; i <= m; i++) { int u, v, k; scanf("%d %d %d", &u, &v, &k); u ^= ans; int x = lca(u, v), y = fa[x][0]; ans = T[query(root[u], root[v], root[x], root[y], 1, tot, k)]; if(i < m) printf("%d\n", ans); else printf("%d", ans); } return 0; }


與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的BZOJ-2588-Count-on-a-tree-SPOJ10628-LCA+主席树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本免费专区 | tube国产麻豆 | 国产一区二区三区视频免费在线观看 | 国产免费黄色片 | 亚洲美女综合网 | 播播网色播播 | 天堂av在线免费观看 | 成年网站在线播放 | 免费观看一区二区 | 成人一区二区在线观看 | 看免费黄色片 | 成人av日韩 | 亚洲国产123 | 一本大道东京热无码aⅴ | 久久久三区 | 欧美黄色a视频 | 精品人伦一区二区三电影 | av色在线| 男人天堂视频在线观看 | 性饥渴的农村熟妇 | 永久av| 自拍偷拍福利视频 | 91成人一区| 成片免费观看视频 | 69国产| 日韩美女av在线 | 国产一级性生活 | 人人干超碰 | 欧美大色一区 | 国产精品老女人 | 亚洲图片中文字幕 | 久操视频网站 | 亚洲av无码片一区二区三区 | 国产欧美日韩综合 | 日韩女优网站 | 锦绣未央在线观看 | 日本不卡网 | 深夜福利国产精品 | 视频在线观看免费大片 | 日本欧美不卡 | 日本色网址| 狠狠干夜夜草 | 欧美成人精品一区二区 | 久久久久久久国产精品视频 | mm131在线 | 毛片999 | a极黄色片 | 美女bb视频 | 久久美女精品 | 国产香蕉97碰碰碰视频在线观看 | 国产一区视频在线免费观看 | 国产女厕一区二区三区在线视 | 成人精品在线视频 | 免费黄色看片网站 | 少妇高潮灌满白浆毛片免费看 | 久久99视频精品 | 日本爱爱网址 | 中文字幕一区二区人妻 | 亚洲天堂日本 | 波多野吉衣一区二区三区 | 精品久久久久久久久久久久久久久久久 | 欧美精品成人一区二区在线观看 | 日韩欧美激情视频 | 91av在线网站| 成人精品视频一区 | 欧美精品一区二区三区久久 | 69精品丰满人妻无码视频a片 | 亚洲精品456 | 超碰caoporen| 专干老肥女人88av | 夜夜涩| 97人妻一区二区精品免费视频 | 午夜激情福利电影 | 国产免费无码一区二区视频 | 裸体一区二区三区 | 精品国产网站 | 国产日韩免费视频 | 91爱爱爱爱| 黑森林av凹凸导航 | 欧美人禽杂交狂配 | 极品少妇xxxx精品少妇 | 两性囗交做爰视频 | 九九操 | 波多野结衣一区二区三区免费视频 | 成人h动漫精品一区二 | 亚洲精品日韩在线 | 亚洲性图一区二区 | 亚洲视频观看 | 神秘马戏团在线观看免费高清中文 | 国产精品一级二级三级 | 亚洲高清久久久 | 国产91美女视频 | 91亚洲国产成人久久精品网站 | 极品美女av | 欧美国产一区二区三区 | 欧美性受xxx黑人xyx性爽 | 非洲黑人毛片 | 午夜亚洲 | 亚洲精品一卡二卡 |