题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1866

题目大意:一颗多叉树中,每个结点有一个权值,求每个节点有多少个其子孙节点的权值大于其权值.

题目思路:用树状数组快速求,求某一节点时,之前必然要把他的子节点都插到树状数组,所以要用遍历完子树才能求值,但是遍历子树之前也需先求值,因为之前有其他的节点插到树状数组了.

代码:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <time.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;//#define ull unsigned __int64
//#define ll __int64
//#define ull unsigned long long
//#define ll long long
#define son1 New(p.xl,xm,p.yl,ym),(rt<<2)-2
#define son2 New(p.xl,xm,min(ym+1,p.yr),p.yr),(rt<<2)-1
#define son3 New(min(xm+1,p.xr),p.xr,p.yl,ym),rt<<2
#define son4 New(min(xm+1,p.xr),p.xr,min(ym+1,p.yr),p.yr),rt<<2|1
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define middle (l+r)>>1
#define MOD 1000000007
#define esp (1e-8)
const int INF=0x3F3F3F3F;
const double DINF=10000.00;
//const double pi=acos(-1.0);
const int N=50010;
int n,m;
int sum[N],val[N],hash[N],ret[N];
vector<int>son[N];int bs(int key,int size,int A[]){int l=0,r=size-1,mid;while(l<=r){mid=middle;if(key>A[mid]) l=mid+1;else if(key<A[mid]) r=mid-1;else return mid;}return -1;
}int lowbit(int x){return x&(-x);}void Add(int x,int c){while(x<=m) sum[x]+=c,x+=lowbit(x);
}int Sum(int x){int r=0;while(x>0) r+=sum[x],x-=lowbit(x);return r;
}void Query(int rt){int i,pos=bs(val[rt],m,hash)+1;int tmp=Sum(m)-Sum(pos),len=son[rt].size();for(i=0;i<len;i++) Query(son[rt][i]);ret[rt]=Sum(m)-Sum(pos)-tmp;Add(pos,1);
}int main(){//freopen("1.in","r",stdin);//freopen("1.out","w",stdout);int i,j,k;//int T,cas;scanf("%d",&T);for(cas=1;cas<=T;cas++)while(~scanf("%d",&n)){for(i=0;i<n;i++) son[i].clear();for(i=1;i<n;i++){scanf("%d",&k);son[k].push_back(i);}for(i=0;i<n;i++){scanf("%d",&val[i]);hash[i]=val[i];}sort(hash,hash+n);for(i=m=1;i<n;i++) if(hash[i]!=hash[i-1]) hash[m++]=hash[i];memset(sum,0,sizeof(sum));Query(0);for(i=0;i<n-1;i++) printf("%d ",ret[i]);printf("%d\n",ret[i]);}return 0;
}

zoj 2866 Overstaffed Company相关推荐

  1. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  2. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  3. zoj 1204 Additive equations

    ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...

  4. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)

    http://poj.org/problem?id=1411  POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...

  5. 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...

    既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类: 代码 public class Comp ...

  6. 博世力士乐液压_[Event Review] Company Visit Bosch Rexroth 博世力士乐液压工厂参观

    Event Review Company Visit:  Bosch Rexroth (Beijing) Hydraulic Co. Ltd.  博世力士乐(北京)液压有限公司 April 24, 2 ...

  7. SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001-

    SAP MM 执行事务代码MRRL报错-No message was found for partner 100065 company code 0001- 1, 执行事务代码MRRL 触发invoi ...

  8. SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021

    SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021 使用事务代码MIGO,移动类型24 ...

  9. SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 –

    SAP IDoc Post不成功,报错 - A company code cannot be determined for LI 0000100061 – IDoc#4096出现如下报错:A comp ...

最新文章

  1. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)
  2. linux进程同步问题,关于LINUX下进程和线程对文件的同步问题,请高手来看看!!!...
  3. 点云网络的论文理解(四)-点云网络的优化 PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
  4. BOOST_CONSTANTS_GENERATE宏相关用法的测试程序
  5. Java 中关键字transient引出序列化与反序列化
  6. Tensorflow2.0数据和部署(二)——基于设备的模型与TensorFlow Lite
  7. 《老码识途》读书笔记:第一章(中)
  8. python中tree安装_Python 学习笔记:Jupyter Notebook 的安装使用以及 tree 路径变更
  9. 拉格朗日插值法_Lagrange、Newton、分段插值法及Python实现
  10. visio的一些用法
  11. Mysql 常见ALTER TABLE操作
  12. P1852 跳跳棋(建模LCA)
  13. Gartner发布2021年新兴技术成熟度曲线,三大新兴技术趋势主题
  14. 计算机系大一开学需要带什么,大一新生上学要不要带电脑?辅导员给出建议,家长可以参考...
  15. python powerbi知乎_利用Python调用Power BI REST API
  16. 在线计算机安装系统,怎么在线做系统|电脑直接网上做系统方法
  17. KeeFarce工具抓取Keepass密码攻击复现及其行为监测
  18. Android之粗仿微信6.0——微信分界面
  19. 理解 RxJava 线程模型
  20. pytest 常用测试报告类型

热门文章

  1. LatinIME默认打开各国语言
  2. babel源码解析之(@babel/preset-env)
  3. vscode用户代码片段
  4. 如何精确统计用户在页面的停留时长?
  5. php安装vld扩展
  6. windows下升级nodejs
  7. 【跟风转一发】清华差生10年奋斗经历
  8. ReSharper入门(一) 【含:详细图文攻略】
  9. 电脑里本地连接没有了,不见了的解决方法
  10. Matlab中的normrnd函数用法(产生正态分布随机数)