题意:

现在n个人,其中编号0的是老板,之后n-1个员工,每个员工只有一个上司,有一个忠诚值和能力值。每次要解雇一个人的时候,从他的下属中选取能力值大于他的且忠诚值最高的一个,若不存在则输出-1.共m次询问,每次询问i,输出解雇i会选择哪个编号的员工代替值。(所有询问都不相互影响)

#include<bits/stdc++.h>
using namespace std;
#define N 50020 struct peo
{
int a,v,id;
peo()
{
a=;v=;id=;
} }s[N];
int t[N<<];
int cnt,n,q;
vector<int>v[N];
int ha[],l[N],r[N],ans[N]; void dfs(int x)
{
l[x]=++cnt;
for(int i=;i<v[x].size();i++)
dfs(v[x][i] );
r[x]=cnt;
} void build(int L,int R,int pos)
{
t[pos]=-;
if(L==R)
return ;
int mid=(L+R)>>;
build(L,mid,pos<< );
build(mid+,R,pos<<|);
} bool cmp(peo a,peo b)
{
return a.a>b.a;
} void update(int x,int v,int L,int R,int pos)
{
if(L==R)
{
t[pos]=v;
return ;
}
int mid=(L+R)>>;
if(x<=mid)
update(x,v,L,mid,pos<<);
else
update(x,v,mid+,R,pos<<|);
t[pos]=max(t[pos<<],t[pos<<|]);
} int query(int l,int r,int L,int R,int pos)
{
int ans=-;
if(l<=L&&r>=R)
return t[pos];
int mid=(L+R)>>;
if(l<=mid)ans=max(ans,query(l,r,L,mid,pos<<));
if(r>mid)ans=max(ans,query(l,r,mid+,R,pos<<|));
return ans;
} int main()
{
int cas;cin>>cas;
while(cas--)
{
scanf("%d%d",&n,&q);
for(int i=;i<n;i++)
v[i].clear(); for(int i=;i<n;i++)
{
int pre;
scanf("%d%d%d",&pre,&s[i].v,&s[i].a);
v[pre].push_back(i);
s[i].id=i;
ha[s[i].v]=i;
}
cnt=;
dfs();
build (,n-,);
sort(s+,s+n,cmp);
int i=,j;
while(i<n)
{
j=i;
while(j<n&&s[i].a==s[j].a)
{
int k=query( l[s[j].id ],r[s[j].id ]-,,n-, );
if(k==-)
ans[s[j].id ]=-;
else
ans[s[j].id]=ha[k];
j++;
}
j=i;
while(j<n&&s[i].a==s[j].a)
{
update(l[s[j].id ]-,s[j].v,,n-, );
j++;
}
i=j;
}
while(q--)
{
int x;
scanf("%d",&x);
printf("%d\n",ans[x]);
}
}
return ;
}

Successor hdu 4366 线段树的更多相关文章

  1. Successor HDU - 4366 (预处理,线段树,dfs序)

    Successor HDU - 4366 Sean owns a company and he is the BOSS.The other Staff has one Superior.every s ...

  2. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  7. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  8. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

随机推荐

  1. Oracle中对number类型数据to_char()出现各位少0,或者值为###的处理

    问题描述: 在Oracle中使用to_char()函数时当number值为小数时,常常个位0不显示 比如:select to_char(0.02) from dual,结果为.02 改进为 selec ...

  2. 【CF888E】Maximum Subsequence(meet in the middle)

    [CF888E]Maximum Subsequence(meet in the middle) 题面 CF 洛谷 题解 把所有数分一下,然后\(meet\ in\ the\ middle\)做就好了. ...

  3. winform里宿主WCF,并传递winform变量给WCF

    最近客户要求把服务器端程序里的二个功能用service的方式提供出来,方便调用.首先想着单独建一个wcf 服务的项目,但是因为要用到server端程序winform里的变量,因此只能在winform里 ...

  4. LOJ#2540 随机算法

    题意:给定图,随机一个排列,依次加点,如果加点之后不是独立集就不加.求最后得到一个最大独立集的概率. 解:就是求有多少个排列可以加出最大独立集. 显然有一个3n的状压DP,0表示没加,1表示没加上,2 ...

  5. 【codevs1245】最小的 N 个和

    题目大意:给定两个有 N 个数字的序列,从这两个序列中任取一个数相加,共有 \(N^2\) 个和,求这些和中最小的 N 个. 题解:由于数据量是 10W,必须减少每次选取的决策集合中元素的个数.可以发 ...

  6. 手动部署一个单节点kubernetes

    目录 简要说明 安装环境说明 部署 生成相关证书 证书类型说明 安装cfssl证书生成工具 生成CA证书 生成Kubernetes master节点使用的证书 生成kubectl证书 生成kube-p ...

  7. 深入理解JS this,作用域

    深入理解JS this 阮一峰博客链接http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this ...

  8. bzoj千题计划189:bzoj1867: [Noi1999]钉子和小球

    http://www.lydsy.com/JudgeOnline/problem.php?id=1867 dp[i][j] 落到(i,j)的方案数 dp[i][j]=0.5*dp[i-1][j]   ...

  9. 何凯文每日一句打卡||DAY7

  10. Phalcon框架之———— 2.0升级到3.0 问题Model验证问题解决

    Github源码:https://github.com/phalcon/cphalcon/tree/master/phalcon/validation/validator Phalcon 2.0 Mo ...