线段树合并都是蓝题了嘛 我可能和时代脱轨了emm...

直接离散化然后合并就好啦w

生病了真难受QAQ

//Love and Freedom.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define inf 20021225
#define mxn 100010
using namespace std; struct node
{
int ls,rs,sum;
}t[mxn*40];
int cnt,rt[mxn],ans[mxn];
struct edge
{
int to,lt;
}e[mxn];
int val[mxn],in[mxn],ecnt;
int p[mxn],dd[mxn],n; void add(int x,int y)
{
e[++ecnt].to=y;e[ecnt].lt=in[x];in[x]=ecnt;
} void pushup(int x)
{
t[x].sum = t[t[x].ls].sum+t[t[x].rs].sum;
} int merge(int x,int y,int l,int r)
{
if(!x||!y) return x+y;
if(l==r)
{
t[x].sum+=t[y].sum;
return x;
}
int mid = (l+r)>>1;
t[x].ls=merge(t[x].ls,t[y].ls,l,mid);
t[x].rs=merge(t[x].rs,t[y].rs,mid+1,r);
pushup(x); return x;
} void insert(int &x,int l,int r,int d)
{
if(!x) x=++cnt; t[x].sum++;
if(l==r) return;
int mid=(l+r)>>1;
if(d<=mid) insert(t[x].ls,l,mid,d);
else insert(t[x].rs,mid+1,r,d);
pushup(x);
} int query(int x,int l,int r,int d)
{
if(!x) return 0;
if(l==r) return t[x].sum;
int mid=(l+r)>>1;
if(d<=mid) return query(t[x].ls,l,mid,d)+t[t[x].rs].sum;
else return query(t[x].rs,mid+1,r,d);
}
bool cmp(int x,int y)
{
return val[x]<val[y];
}
void dfs(int x)
{
for(int i=in[x];i;i=e[i].lt)
dfs(e[i].to);
insert(rt[x],1,n+1,p[x]);// int tmp = ;
for(int i=in[x];i;i=e[i].lt)
rt[x]=merge(rt[x],rt[e[i].to],1,n+1);
ans[x] = query(rt[x],1,n+1,p[x]+1);
}
int main()
{
int f;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&val[i]),dd[i]=i;
sort(dd+1,dd+n+1,cmp);
for(int i=1;i<=n;i++) p[dd[i]]=i;
for(int i=2;i<=n;i++)
{
scanf("%d",&f);
add(f,i);
}
dfs(1);
for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
return 0;
}

最新文章

  1. 移动端web开发的一些知识点
  2. android 6.0 高通平台sensor 工作机制及流程(原创)
  3. flexigrid扩展(添加全选,格式化表单)
  4. POJ 2114 Boatherds【Tree,点分治】
  5. php的一些小笔记--数组
  6. VC MFC 屏蔽ESC和ENTER键关闭对话框
  7. Java swing 如何将一个按钮放置到弹出框框的任意位置?(Absolute layout 布局的使用)
  8. ubuntu下命令使用
  9. LeetCode 243. Shortest Word Distance (最短单词距离)$
  10. linux驱动---用I/O命令访问PCI总线设备配置空间
  11. linux sudo 运行找不到java、python命令
  12. node中间件概念
  13. LeetCode题解之Diameter of Binary Tree
  14. [LeetCode] 590. N-ary Tree Postorder Traversal_Easy
  15. c# double 类型保留几位小数
  16. HTML基础之JS
  17. auto semicolon insertion 自动分号补齐的坑
  18. Cognos Report Studio 链接查询需要注意的地方2
  19. oracle数据导出导入(exp/imp)
  20. 几个python one-liner

热门文章

  1. [luogu]P1168 中位数[堆]
  2. 给数据库用户授权(对象多为系统表,如dba可以查看的表)
  3. oracle 字段信息
  4. rownum的用法oracle
  5. 在google chrome浏览器上安装 Vue Devtools工具
  6. ModuleNotFoundError: No module named &#39;mysql&#39;
  7. JVisualVM 模拟一次内存泄漏场景分析
  8. Delphi Indy IDHttp 403 forbidden
  9. C++ bitset的使用
  10. 应用安全-工具使用-Burpsuite