bzoj 4756 Promotion Counting —— 线段树合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4756
合并子树的权值线段树;
merge 返回 int 或者是 void 都可以。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mid ((l+r)>>1)
using namespace std;
int const xn=1e5+,xm=xn*;//
int n,p[xn],b[xn],hd[xn],ct,to[xn<<],nxt[xn<<];
int cnt,rt[xn],ls[xm],rs[xm],sum[xm],ans[xn],tot;
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return f?ret:-ret;
}
int gt[];
void wr(int x)
{
if(!x){puts(""); return;}
if(x<)putchar('-'),x=-x;
int t=;
while(x)gt[++t]=x%,x/=;
for(int i=t;i;i--)putchar(gt[i]+'');
puts("");
}
void add(int x,int y){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct;}
void merge(int &x,int y)
{
if(!x){x=y; return;}
sum[x]+=sum[y];
if(ls[y])merge(ls[x],ls[y]);//if
if(rs[y])merge(rs[x],rs[y]);//if
}
/*
int merge(int x,int y,int l,int r)
{
if(!x||!y)return x+y;
sum[x]+=sum[y];
if(l==r)return x;
ls[x]=merge(ls[x],ls[y],l,mid);
rs[x]=merge(rs[x],rs[y],mid+1,r);
return x;
}
*/
void add(int &x,int l,int r,int pos)
{
if(!x)x=++cnt; sum[x]++;
if(l==r)return;
if(pos<=mid)add(ls[x],l,mid,pos);
else add(rs[x],mid+,r,pos);
}
int query(int x,int l,int r,int L,int R)
{
if(!x)return ;
if(l>=L&&r<=R)return sum[x];
int ret=;
if(mid>=L)ret+=query(ls[x],l,mid,L,R);
if(mid<R)ret+=query(rs[x],mid+,r,L,R);
return ret;
}
void dfs(int x)
{
for(int i=hd[x],u;i;i=nxt[i])
{
dfs(u=to[i]);
// rt[x]=merge(rt[x],rt[u],1,tot);
merge(rt[x],rt[u]);
}
ans[x]=query(rt[x],,tot,p[x],tot);
add(rt[x],,tot,p[x]);
}
int main()
{
n=rd();
for(int i=;i<=n;i++)p[i]=rd(),b[i]=p[i];
sort(b+,b+n+); tot=unique(b+,b+n+)-b-;
for(int i=;i<=n;i++)p[i]=lower_bound(b+,b+tot+,p[i])-b;
for(int i=,fa;i<=n;i++)fa=rd(),add(fa,i);
dfs();
for(int i=;i<=n;i++)wr(ans[i]);
return ;
}
bzoj 4756 Promotion Counting —— 线段树合并的更多相关文章
- bzoj 4756 [Usaco2017 Jan]Promotion Counting——线段树合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4756 线段树合并裸题.那种返回 int 的与传引用的 merge 都能过.不知别的题是不是这 ...
- BZOJ[Usaco2017 Jan]Promotion Counting——线段树合并
题目描述 The cows have once again tried to form a startup company, failing to remember from past experie ...
- BZOJ4756: [Usaco2017 Jan]Promotion Counting(线段树合并)
题意 题目链接 Sol 线段树合并板子题 #include<bits/stdc++.h> using namespace std; const int MAXN = 400000, SS ...
- BZOJ4756:[USACO]Promotion Counting(线段树合并)
Description n只奶牛构成了一个树形的公司,每个奶牛有一个能力值pi,1号奶牛为树根. 问对于每个奶牛来说,它的子树中有几个能力值比它大的. Input n,表示有几只奶牛 n<=10 ...
- BZOJ.3545.[ONTAK2010]Peaks(线段树合并)
题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...
- bzoj 4631: 踩气球 线段树合并
4631: 踩气球 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 265 Solved: 136[Submit][Status][Discuss] ...
- BZOJ:5457: 城市(线段树合并)(尚待优化)
5457: 城市 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 18 Solved: 12[Submit][Status][Discuss] Des ...
- 线段树合并 || 树状数组 || 离散化 || BZOJ 4756: [Usaco2017 Jan]Promotion Counting || Luogu P3605 [USACO17JAN]Promotion Counting晋升者计数
题面:P3605 [USACO17JAN]Promotion Counting晋升者计数 题解:这是一道万能题,树状数组 || 主席树 || 线段树合并 || 莫队套分块 || 线段树 都可以写..记 ...
- 洛谷P3605 [USACO17JAN] Promotion Counting 晋升者计数 [线段树合并]
题目传送门 Promotion Counting 题目描述 The cows have once again tried to form a startup company, failing to r ...
随机推荐
- ubuntu下安装jdk、tomcat、mysql
1.JDK安装 方法1: 将JDK安装包解压缩之后,编辑~/.bashrc文件,在该文件里面加入下面的配置,然后通过source ~/.bashrc.JDK即安装成功. export JAVA_HOM ...
- PLsql/Oracle数据库中没有scott账户,如何创建并解锁
当然首先要装好Oracle 11g 然后还要有sqlplus,这个在Oracle11g的时候应该都会配上的 进入正题,如果oracle/plsql没scott账户,如何创建 先找到Oracle安装目录 ...
- 数据库系统学习(九)-嵌入式SQL语言之基本技巧
第九讲 嵌入式SQL语言之基本技巧 901 什么是嵌入式SQL语言 交互式SQL语言的局限性 嵌入式SQL语言 交互式和嵌入式语言的对比 高级语言中使用嵌入式语言需要解决的问题 902 程序与数据库连 ...
- BUPT复试专题—数据库检索(2014软院)
题目描述 在数据库的操作过程中,我们进场会遇到检索操作.这个题目的任务是完成一些特定格式的检索,并输出符合条件的数据库中的所有结果. 我们现在有一个数据库,维护了学生的姓名(Name),性别(Sex) ...
- ivy在eclipse中的重新加载
ivy在eclipse中的重新加载 如果由于网速的原因,导致了ivy没有正常的加载,可以进行ivy的重新加载: 1,右键点击项目,选择属性->Java Build Path->Librat ...
- SpringCloud中Redis的使用
1.引入redis相关jar包 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- require.js结合项目的使用心得
1.首先引入require.js 2.配置config.js文件 var $cdn_url=/'''/''/;----->指定文件一个共用的路径 require.config({ baseUrl ...
- 软件系统架构 https://www.lanhusoft.com/Article/349.html
跟蓝狐学习Nop--NopCommerce源码架构详解专题目录 Posted By : 蓝狐 Updated On : 2018-04-16 14:46 我们承接以下nop相关的业务,欢迎联系我们. ...
- 【第四篇章-android平台MediaCodec】解决Observer died. Quickly, do something, ... anything...
当出现!!!Observer died. Quickly, do something, ... anything...说明你的程序已经出现严重异常了,那会是什么情况呢?这个问题困扰了我许久,后来原来是 ...
- uva 10806 Dijkstra, Dijkstra. (最小费最大流)
uva 10806 Dijkstra, Dijkstra. 题目大意:你和你的伙伴想要越狱.你的伙伴先去探路,等你的伙伴到火车站后,他会打电话给你(电话是藏在蛋糕里带进来的),然后你就能够跑去火车站了 ...