hdu 4366 线段树+dfs序列
来源:互联网 发布:淘宝买洋酒靠谱吗 编辑:程序博客网 时间:2024/05/03 11:57
#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<map>#include<algorithm>#define MS(x,y) memset(x,y,sizeof(x))#define pi acos(-1.0)#define ls o<<1#define rs o<<1|1#define root 1,0,time-1using namespace std;void fre(){freopen("t.txt","r",stdin);}typedef long long LL;typedef unsigned long long ULL;const int MAXN = 50005;const int inf = 0x3f3f3f3f;struct staff{ int l,a,id;}st[MAXN];struct node{ int v,next;}e[MAXN];int m,n,ed,time;int head[MAXN],in[MAXN*2],out[MAXN*2],ans[MAXN],maxv[8*MAXN];map<int,int>mp;bool cmp(staff a,staff b){ return a.a > b.a;}void dfs(int x){ in[x] = time++; for(int i = head[x]; i!=-1; i=e[i].next) { dfs(e[i].v); } out[x] = time++;}void init(){ int fa; ed = time = 0; MS(head,-1);MS(ans,-1);MS(maxv,-1); mp.clear(); for(int i = 1; i < n; ++i) { scanf("%d%d%d",&fa,&st[i].l,&st[i].a); st[i].id = i; mp[st[i].l] = i; e[ed].v = i; e[ed].next = head[fa]; head[fa] = ed++; } dfs(0); sort(st+1,st+n,cmp);}int query(int ql,int qr,int o,int l,int r){ if(ql <= l && qr >= r) return maxv[o]; int m = l+(r-l)/2,ans = -1; if(ql<= m) ans = query(ql,qr,ls,l,m); if(qr > m) ans = max(query(ql,qr,rs,m+1,r),ans); return ans;}void update(int p,int v,int o,int l,int r){ if(l==r) maxv[o] = v; else { int m = l+(r-l)/2; if(p <= m) update(p,v,ls,l,m); else update(p,v,rs,m+1,r); maxv[o] = max(maxv[ls],maxv[rs]); }}int solve(){ int f; for(int i = 1; i <= m; ++i) { scanf("%d",&f); if(ans[f]==-1) printf("-1\n"); else printf("%d\n",mp[ans[f]]); }}int main(){ // fre(); int i,j,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(); for(i = 1; i < n; i = j) { j = i; while(j < n && st[i].a == st[j].a)//能力值相等,成一批 { int id = st[j].id; ans[id] = query(in[id]+1,out[id]-1,root); j++; } j = i; while(j < n && st[i].a == st[j].a) { int id = st[j].id; update(in[id],st[j].l,root); j++; } } solve(); }}
0 0
- hdu 4366 线段树+dfs序列
- 线段树+dfs HDU
- hdu 4366 Successor dfs序 + 线段树
- HDU 4366 (dfs序 线段树)
- hdu 4366(线段树+DFS序)
- HDU 4366 浅谈DFS序+线段树
- HDU 1556(线段树+dfs)
- HDU 4366 Successor(线段树 DFS时间戳)
- hdu 5039 Hilarity(dfs序 + 线段树)
- [HDU 5039 Hilarity] DFS序+线段树
- HDU 5039 Hilarity dfs序、线段树
- hdu 5039 线段树+dfs序
- HDU Hilarity (dfs序+线段树)
- hdu 5242 Game(dfs+线段树)
- hdu 5438 Ponds(线段树+dfs)
- HDU 5692 (线段树 dfs序)
- HDU 5692 Snacks dfs序 + 线段树
- hdu 5877 线段树+离散化+DFS
- leetcode笔记:Search Insert Position
- vim常用命令汇总
- 关于kafka的疑惑
- C++在Windows环境下多线程自动锁的实现
- (一) Porting USB 3G MODEM to Android
- hdu 4366 线段树+dfs序列
- sqrtm--矩阵的平方根
- 汇编指令总结
- Atitit.java 反编译 工具 attilax 总结
- 走上一条归路:IOS I am coming
- Java多线程总结之线程安全队列Queue
- cond--求矩阵的条件数
- condest--1-范数的条件数估计
- (二) RIL 层分析