雅礼集训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. MS SQL 设置自增长字段默认值

    dbcc checkident(tablename,reseed,value) 其中tablename为你所要修改的表名,value为默认值.比如你要设置自增长字段值从1开始,则: )

  2. 基于django的个人博客网站建立(四)

    基于django的个人博客网站建立(四) 前言 网站效果可点击这里访问 今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充 主要内容 其实今天的内容和前 ...

  3. getattribute方法,Python属性访问拦截器的用法

    __getattribute__()方法是属性访问时的拦截器,每当访问属性的时候,会先执行这个方法,然后再执行访问属性的操作步骤,可以用来记录属性访问的log.代码示例如下:   class Itca ...

  4. 如何在Mac上使用Siri

    在您的iPhone上,要求Siri执行命令很简单.但是,如果在计算机上工作时附近没有iPhone,会发生什么情况?您也可以在Mac上使用Siri.快速简便,使其成为iMac或MacBook的完美伴侣. ...

  5. 关于eclipse创建的[传统web项目][传统maven项目][maven-web项目][springboot项目]目录结构

    总体比较 [传统web项目] [传统maven项目] [maven-web项目] [springboot项目] 本文摘至https://blog.csdn.net/qq_42747738/articl ...

  6. Django回顾--配置文件

    """ Django settings for meiduo_mall project. Generated by 'django-admin startproject' ...

  7. 【使用篇二】SpringBoot使用Druid作为数据源(19)

    Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等.Druid在监 ...

  8. 从壹开始 [ 学调试 ]║ 轻松实现 PC端+移动端的本地同步联调

    缘起 哈喽!(瞬间就想到了开场白:亲爱的朋友们,我又回来了

  9. Android给Viewpager默认指定页

    上结果代码 private void setViewPaperItem(int position) { try { Class c = Class.forName("android.supp ...

  10. mac pro下iterm快捷键(转)

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...