2022春每日一题:Day 38
2024-10-21 06:07:37
题目[USACO17JAN]Promotion Counting P
从根节点dfs一遍,树状数组维护进入和出去时这个节点的贡献,一减就是答案
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#define lowbit(x) x&-x
const int N=1e5+5;
using namespace std;
struct pos
{
int v,id;
pos(int vv,int ii)
{
v=vv;id=ii;
}
pos(){
}
friend bool operator < (pos a,pos b)
{
return a.v<b.v;
}
}nums[N];
int n,a[N],fs[N],fe[N],tot;
vector <int> g[N];
namespace fenwick
{
struct fw
{
int c;
}e[N];
void modify(int x,int v)
{
for(int i=x;i<=n;i+=lowbit(i))
e[i].c+=v;
}
int query(int x)
{
int ret=0;
for(int i=x;i;i-=lowbit(i))
ret+=e[i].c;
return ret;
}
}
using namespace fenwick;
void dfs(int u,int fa)
{
++tot;
modify(a[u],1);
fs[u]=tot-query(a[u]);
for(int i=0;i<g[u].size();i++)
{
int k=g[u][i];
if(k==fa)
continue;
dfs(k,u);
}
fe[u]=tot-query(a[u]);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int v;
scanf("%d",&v);
nums[i]=pos(v,i);
}
for(int i=2;i<=n;i++)
{
int v;
scanf("%d",&v);
g[v].push_back(i);
g[i].push_back(v);
}
sort(nums+1,nums+1+n);
int last=-1,now=1;
for(int i=1;i<=n;i++)
{
if(last!=nums[i].v)
last=nums[i].v,now=i;
a[nums[i].id]=now;
}
dfs(1,0);
for(int i=1;i<=n;i++)
printf("%d\n",fe[i]-fs[i]);
return 0;
}
最新文章
- Vijos1046观光旅游[floyd 最小环]
- 2016年12月21日 星期三 --出埃及记 Exodus 21:16
- 大众点评试题分析(C/C++)
- Solr 5.x集成中文分词word,mmseg4j
- 超炫的3D HTML源代码
- 关于fseek和文件";ab+";打开方式的问题
- servlet 容器,工作原理,优缺点
- DZ升级到X3.2后,UCenter用户管理中心进不了了
- Google Code项目代码托管网站上Git版本控制系统使用简明教程
- 阿里云OS和Android的关系(本文转载月光博客)
- line-height 行高
- yum仓库
- Json常用代码
- PHP中关于PDO数据访问抽象层的功能操作
- Redis设置内存最大占用值
- Vim 命令、操作、快捷键
- ERP出库审核业务(四十四)
- laravel 数据库 - 增删查改
- vim/sed/awk/grep等文件批处理总结
- #C语言初学记录(位运算)
热门文章
- 关于使用docker volume挂载的注意事项
- SpringBoot使用自定义注解+AOP+Redis实现接口限流
- Docker 完整版教程
- PAT (Basic Level) Practice (中文)1015 德才论 分数 25
- C#-01 关于C#中传入参数的一些用法
- Python(二)常用的正则表达式
- 关于aws-Global区的新账户的一些限制坑点
- 关于vmware虚拟机的ova/ovf转换成aws上的AMI镜像
- 【nginx】使用 nginx 时,使用 sub_filter 注入 js 代码,例如 google analysis 等
- PHP Phar反序列化学习