hdu 4366 线段树+dfs序列
2015-12-25 19:44
281 查看
#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-1 using 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(); } }
相关文章推荐
- (一) Porting USB 3G MODEM to Android
- Atitit.java 反编译 工具 attilax 总结
- u盘写保护
- DotNetOpenAuth Part 1 : Authorization 验证服务实现及关键源码解析
- 2015苏州大学ACM-ICPC集训队选拔赛(1) 1007
- 关于kafka的疑惑
- 321. Create Maximum Number(贪心)
- 深入剖析Android四大组件(九)——Activity之AppCompatActivity与toolbar的结合
- 2015苏州大学ACM-ICPC集训队选拔赛(1) 1006
- bzoj 1191 [HNOI2006]超级英雄Hero(最大基数匹配)
- https和http的区别
- How to do ADC Calibration
- Atitit.收银系统模块架构attilax 总结
- 自卑都是自己不踏实做事的表现
- Atitit.收银系统模块架构attilax 总结
- sarama架构
- Atitit.收银系统模块架构attilax 总结
- 希腊字母读音表
- 用GTmetrix来优化你的网页(集成了YSlow、FireBug的功能)
- LeetCode 6 ZigZag Conversion(规律)