题目[USACO17JAN]Promotion Counting P

从根节点dfs一遍,树状数组维护进入和出去时这个节点的贡献,一减就是答案

代码:

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <vector>
  6. #define lowbit(x) x&-x
  7. const int N=1e5+5;
  8. using namespace std;
  9. struct pos
  10. {
  11. int v,id;
  12. pos(int vv,int ii)
  13. {
  14. v=vv;id=ii;
  15. }
  16. pos(){
  17. }
  18. friend bool operator < (pos a,pos b)
  19. {
  20. return a.v<b.v;
  21. }
  22. }nums[N];
  23. int n,a[N],fs[N],fe[N],tot;
  24. vector <int> g[N];
  25. namespace fenwick
  26. {
  27. struct fw
  28. {
  29. int c;
  30. }e[N];
  31. void modify(int x,int v)
  32. {
  33. for(int i=x;i<=n;i+=lowbit(i))
  34. e[i].c+=v;
  35. }
  36. int query(int x)
  37. {
  38. int ret=0;
  39. for(int i=x;i;i-=lowbit(i))
  40. ret+=e[i].c;
  41. return ret;
  42. }
  43. }
  44. using namespace fenwick;
  45. void dfs(int u,int fa)
  46. {
  47. ++tot;
  48. modify(a[u],1);
  49. fs[u]=tot-query(a[u]);
  50. for(int i=0;i<g[u].size();i++)
  51. {
  52. int k=g[u][i];
  53. if(k==fa)
  54. continue;
  55. dfs(k,u);
  56. }
  57. fe[u]=tot-query(a[u]);
  58. }
  59. int main()
  60. {
  61. scanf("%d",&n);
  62. for(int i=1;i<=n;i++)
  63. {
  64. int v;
  65. scanf("%d",&v);
  66. nums[i]=pos(v,i);
  67. }
  68. for(int i=2;i<=n;i++)
  69. {
  70. int v;
  71. scanf("%d",&v);
  72. g[v].push_back(i);
  73. g[i].push_back(v);
  74. }
  75. sort(nums+1,nums+1+n);
  76. int last=-1,now=1;
  77. for(int i=1;i<=n;i++)
  78. {
  79. if(last!=nums[i].v)
  80. last=nums[i].v,now=i;
  81. a[nums[i].id]=now;
  82. }
  83. dfs(1,0);
  84. for(int i=1;i<=n;i++)
  85. printf("%d\n",fe[i]-fs[i]);
  86. return 0;
  87. }

2022春每日一题:Day 38的更多相关文章

  1. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  2. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

  7. 【Java每日一题】20161229

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...

  8. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

  9. 【Java每日一题】20161227

    package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...

  10. 【Java每日一题】20161226

    package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...

随机推荐

  1. spark 解决 java.util.Date is not a valid external type for schema of Date

    出错伪代码如下: //出错的点在这里 import java.util.Date ... val t_rdd = t_frame.rdd.map(row => { val photo_url = ...

  2. Dubbo本地调试

    dubbo 启动标志 Dubbo service server started <dubbo:reference id="transferTimingUploadHisRPCServi ...

  3. 强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱

    摘要:看GaussDB for Redis强扩展.高可用.强一致.高安全,如何玩转各大游戏场景 本文分享自华为云社区<GaussDB为什么成为游戏行业的心头爱?>,作者: GaussDB ...

  4. 【问题解决】Debian更新源提示InRelease已过期

    问题 本人日常用 Debian10 今天在更新源(apt update) 时,出现InRelease文件过期的问题 E: http://mirrors.163.com/debian/dists/bus ...

  5. 工程课Linux第一节笔记

    上课笔记 文件系统结构 /根目录 /bin/ 存放系统命令,普通用户与root都可以执行 /etc/ 配置文件保存位置 /lib/ 系统调用的函数库保存位置 /var/ 目录用于存储动态数据,例如缓存 ...

  6. Kibana:在Kibana中对数据进行深入分析 (drilldown)

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/105193907 在上面,我们需要把之前地址栏中拷贝的内容粘贴过来,并做相应的修改.针 ...

  7. crictl 命令 - Kubernetes 管理命令详解

    描述:crictl 是 CRI 兼容的容器运行时命令行对接客户端, 你可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序.由于该命令是为k8s通过CRI使用containerd ...

  8. 1_Layui

    一. 引言 官网: https://www.layui.com/ 在官网首页, 可以很方便的下载Layui Layui是一款经典模块化前端UI框架, 我们只需要定义简单的HTML,CSS,JS即可实现 ...

  9. JS 模块化- 04 CMD 规范与 Sea JS

    1 CMD 规范介绍 CMD: Common Module Definition, 通用模块定义.与 AMD 规范类似,也是用于浏览器端,异步加载模块,一个文件就是一个模块,当模块使用时才会加载执行. ...

  10. 文盘Rust -- struct 中的生命周期

    最近在用rust 写一个redis的数据校验工具.redis-rs中具备 redis::ConnectionLike trait,借助它可以较好的来抽象校验过程.在开发中,不免要定义struct 中的 ...