雅礼集训2019 D7T2 Subsequence

直接贴题解:

平衡树代码:

#include<bits/stdc++.h>
#define ll long long
#define N 100005 using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} int n;
ll a[N];
int ch[N][2],fa[N];
int size[N];
ll p[N];
#define ls ch[v][0]
#define rs ch[v][1]
int rt;
void update(int v) {size[v]=size[ls]+size[rs]+1;}
ll add[N]; void Add(int v,ll f) {
p[v]+=f;
add[v]+=f;
} void down(int v) {
if(add[v]) {
if(ls) Add(ls,add[v]);
if(rs) Add(rs,add[v]);
add[v]=0;
}
} void rot(int v) {
int f=fa[v],gr=fa[f];
int sn=v==ch[f][1],son=ch[v][!sn];
if(gr) ch[gr][f==ch[gr][1]]=v;
ch[f][sn]=son;
ch[v][!sn]=f;
fa[v]=gr,fa[f]=v;
if(son) fa[son]=f;
update(f),update(v);
} void splay(int v) {
static int st[N],top;
st[top=1]=v;
for(int i=v;fa[i];i=fa[i]) st[++top]=fa[i];
for(int i=top;i>=1;i--) down(st[i]);
while(fa[v]) {
int f=fa[v],gr=fa[f];
if(gr) rot(f==ch[gr][1]^v==ch[f][1]?v:f);
rot(v);
}
rt=v;
} int tot;
int Find(int k) {
int v=rt;
while(1) {
if(size[ls]+1==k) return v;
if(size[ls]>=k) v=ls;
else k-=size[ls]+1,v=rs;
}
} int Find_rk(int v) {
splay(v);
return size[ls]+1;
} void Insert(int &v,int k,int id) {
if(!v) {
v=id;
update(v);
return ;
}
if(size[ls]>=k-1) {
Insert(ls,k,id);
fa[ls]=v;
} else {
Insert(rs,k-size[ls]-1,id);
fa[rs]=v;
}
update(v);
} int pos;
void binary(int v,ll a,int pre,int &pos) {
if(!v) return ;
down(v);
ll now=pre+size[ls]+1;
if(a*now>=p[v]) {
pos=v;
binary(ls,a,pre,pos);
} else binary(rs,a,pre+size[ls]+1,pos);
} void out(int v,ll &ans) {
if(!v) return ;
down(v);
out(ls,ans);
ans+=p[v];
cout<<ans<<" ";
out(rs,ans);
} int main() {
n=Get();
for(int i=1;i<=n;i++) a[i]=Get();
rt=1;
update(rt);
p[rt]=a[1]; for(int i=2;i<=n;i++) {
binary(rt,a[i],0,pos=i);
if(pos!=i) splay(pos);
int rk=pos==i?i:Find_rk(pos);
p[i]=a[i]*rk;
Insert(rt,rk,i);
splay(i);
if(ch[i][1]) Add(ch[i][1],a[i]);
}
ll ans=0;
out(rt,ans);
return 0;
}

雅礼集训2019 D7T2 Subsequence的更多相关文章

  1. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  2. 雅礼集训【Day6-1】字符串

    雅礼集训[Day6-1]字符串 假设我们有串\(a\),我们设\(a'\)为\(a\)翻转后按为取反过后的串. 我们只考虑前一半的,长为\(m\)的串.如果前半截匹配了\(a\)或者\(a'\),则\ ...

  3. 「雅礼集训 2017 Day7」事情的相似度

    「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...

  4. 「雅礼集训 2017 Day2」解题报告

    「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...

  5. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  6. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  7. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  8. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  9. 【LYOI 212】「雅礼集训 2017 Day8」价(二分匹配+最大权闭合子图)

    「雅礼集训 2017 Day8」价 内存限制: 512 MiB时间限制: 1000 ms 输入文件: z.in输出文件: z.out   [分析] 蛤?一开始看错题了,但是也没有改,因为不会做. 一开 ...

随机推荐

  1. vmware vsphere client 虚拟机动态添加磁盘

    0x00 事件 为了在虚拟机添加了磁盘之后,不重启机器加载新磁盘. 如上图,添加了一块 10G 的磁盘之后. 在虚拟机中是看不到新添加的磁盘: 0x01 解决 运行如下命令,通过重新扫描 SCSI ( ...

  2. MySQL数据库:多表连接查询

    多表连接查询 注意:使用连接技术建议将表经行重命名! # explain 检索连接是否达标 # 内连接 # 语法1 from 表1 inner join 表2 on 主键字段=外键字段 [where ...

  3. Nginx基础知识点总结和优化项

    1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,常用于做负载均衡服务器 2.为什么要用Nginx?跨平台.配置简单非阻塞.高并发连接:处理2-3万并发连接数,官方监测能支持5 ...

  4. jmeter相关知识学习记录

    基于Jmeter5.2.1 断言之响应断言 响应断言:对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确. 测试字段就是指要断言的内容的匹配处. 响应文本:就是响应的body部分: ...

  5. Java面试题和解答(五)

    1.在Java中Executor和Executors的区别? Executor是线程池的顶层接口,它的实现类如下图所示: Executors是一个类,提供了多个静态方法,用于生成不同类型的线程池,如下 ...

  6. Windows中安装Pytorch和Torch

    近年来,深度学习框架如雨后春笋般的涌现出来,如TensorFlow.caffe.caffe2.PyTorch.Keras.Theano.Torch等,对于从事计算机视觉/机器学习/图像处理方面的研究者 ...

  7. mjml - 如何快速编写响应式电子邮件?

    一.背景 以前做项目碰到发邮件的需求,邮件模板的编辑就是一件头疼的事.因为虽说邮件是支持 HTML 的,但是确是 HTML 子集程度的支持,所以存在必须通过 <table> 排版的恶心之处 ...

  8. Repeater嵌套

    我们自己观察 这是由两个重复项组成的 重复项包含重复项 而重复项的数据源是由订单号决定 即父Repeater的某数据源字段 protected void Repeater1_ItemDataBound ...

  9. C# webclient progresschanged downlodfileCompleted

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. Implement Property Value Validation in the Application Model 在应用程序模型中实现属性值验证

    In this lesson, you will learn how to check whether or not a property value satisfies a particular r ...