雅礼集训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. Oracle - crfclust.bdb文件太大

    今天在检查oracle rac集群时,突然才发现服务器的根目录下面占用了很多空间,照道理不应该出现这种情况,初步猜想可能是哪个日志或跟踪文件太大导致.切换到跟目录,使用du -sh *来一层一层查看到 ...

  2. Centos7 下添加开机自启动服务和脚本

    1.添加开机自启服务 #设置jenkins服务为自启动服务 systemctl enable jenkins.service #启动jenkins服务 systemctl start jenkins. ...

  3. November 24th, Week 48th, Sunday, 2019

    Once you replace negative thoughts with positive ones, you will start having positive results. 淘汰消极思 ...

  4. iconv转换

    /////////////////////////////////////////////////////// #include <iconv.h> #include <stdlib ...

  5. 【python之路.一】基础

    数学操作符 数据类型 字符串复制(*复制次数int).连接(+) 该类操作只能同为字符串类型,否则需要强制转换类型 变量名规则 (驼峰式变量名&下划线式均可) # 注释 BIF(built-i ...

  6. JavaScript 7 获取可视窗口、网页元素、获取节点方式

    获取可视窗口对象 chrom *document.body firefox *document.documentElement 获取滚动条偏移量 ele.scrollTop ele.scrollLef ...

  7. Redis开发与运维:特性

    Redis 特性 速度快 内存数据库 L1 cache reference 读取CPU的一级缓存 0.5 ns Branch mispredict (转移.分支预测) 5 ns L2 cache re ...

  8. zabbix通过agent监控linux主机

    前言: 前几篇博客分别介绍了通过snmp来进行监控linux主机与windows主机,本篇介绍通过agent客户端来进行系统监控. 环境: server:192.168.249.142 client: ...

  9. Python 爬虫从入门到进阶之路(四)

    之前的文章我们做了一个简单的例子爬取了百度首页的 html,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的).但是基本的 urlopen() 方法不支持 ...

  10. event demo

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