题:https://ac.nowcoder.com/acm/contest/4010/E?&headNav=acm

分析:dsu。贪心方法:考虑插入一个值x,对总体贡献,若查找在序列中左边有值  l ,则+加上(x-l)2,若右边有值r,则加上(r-x)2,若俩边都有值,则要减去插入失去的(r-l)2   ;

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
typedef long long ll;
const ll INF=0x3f3f3f3f;
set<int>s;
const int M=1e5+;
int sz[M],son[M],vis[M];
vector<int>g[M];
ll ans[M],tmp[M];
ll sum;
void dfs1(int u){
sz[u]=;
for(int i=;i<g[u].size();i++){
int v=g[u][i];
dfs1(v);
sz[u]+=sz[v];
if(sz[v]>sz[son[u]])
son[u]=v;
}
}
void update(int u,int k){
if(k==-);
s.erase(u);
set<int>::iterator it=s.lower_bound(u); ll r=*it;
it--;
ll l=*it;
if(k==)
s.insert(u);
if(l!=-INF&&r!=INF)///当插入/删除的值在中间
sum-=(r-l)*(r-l)*k; if(l!=-INF)//当插入/删除的值左边有数
sum+=(u-l)*(u-l)*k; if(r!=INF)///当插入/删除的值右边有数
sum+=(r-u)*(r-u)*k; for(int i=;i<g[u].size();i++)
if(!vis[g[u][i]])
update(g[u][i],k);
}
void dfs2(int u,int sign){
//cout<<u<<endl;
///
for(int i=;i<g[u].size();i++){
int v=g[u][i];
if(v!=son[u])
dfs2(v,);
}
if(son[u])
dfs2(son[u],),vis[son[u]]=;
update(u,); ans[u]=sum;
vis[son[u]]=;
if(!sign)
update(u,-);
}
int main(){
int n;
s.insert(INF);
s.insert(-INF);
scanf("%d",&n);
for(int u,i=;i<=n;i++){
scanf("%d",&u);
g[u].pb(i);
}
dfs1();
dfs2(,);
for(int i=;i<=n;i++)
printf("%lld\n",ans[i]);
return ;
}

E、阔力梯的树的更多相关文章

  1. Wannafly Camp 2020 Day 2E 阔力梯的树 - set,启发式合并

    搞一波启发式合并即可 #include <bits/stdc++.h> using namespace std; #define int long long #define iter se ...

  2. URAL-1019 Line Painting----暴力或线段树

    题目链接: https://cn.vjudge.net/problem/URAL-1019 题目大意: 一个0~1e9的区间,初始都是白的,现进行N次操作,每次将一段区间图上一中颜色.最后问说连续最长 ...

  3. 2020 CCPC-Wannafly Winter Camp Day2

    2020 CCPC-Wannafly Winter Camp Day2 A 托米的字符串 虽然每个子串出现的概率是相同的,但是同一长度的子串个数是不同的,所以要分别处理.计算出某一长度的情况下,元音字 ...

  4. D3.js使用过程中的常见问题(D3版本D3V4)

    目录 一.学习D3我必须要学习好SVG矢量图码? 二.如何理解D3给Dom节点绑定数据时的Update.Enter和Exit模式 三.D3绑定数据时用datum与data有什么不一样? 四.SVG图中 ...

  5. R语言︱决策树族——随机森林算法

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:有一篇<有监督学习选择深度学习 ...

  6. D3学习笔记一

    D3学习笔记一 什么是D3? D3(全称Data Driven Documents)是一个用来做Web数据可视化的JavaScript函数库.D3也称之为D3.js. D3是2011年由Mike Bo ...

  7. 力扣208——实现 Trie (前缀树)

    这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...

  8. 力扣Leetcode 572. 另一个树的子树

    另一个树的子树 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 ...

  9. 力扣 - 208. 实现Trie(前缀树)

    目录 题目 思路 代码 复杂度分析 题目 208. 实现 Trie (前缀树) 思路 在我们生活中很多地方都用到了前缀树:自动补全,模糊匹配,九宫格打字预测等等... 虽然说用哈希表也可以实现:是否出 ...

随机推荐

  1. apache2+django+virtualenv 服务器部署实战

    目录 基本配置 配置python环境 安装 python.pip 安装 virtualenv 配置python虚拟环境 配置 apache2 安装 apache2 安装 mod-wsgi 服务 部署d ...

  2. JDBC批处理方法

    每次新建Connection的时候相当于建了一座桥,每次一辆车(PreparedStatement)运送货物(ResultSet)成本太高! 每次都建立网络连接的时间远远大于本地的时间,为了处理大量的 ...

  3. 吴裕雄--天生自然 JAVASCRIPT开发学习:for 循环

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. Bandwagon 安装 Mysql 数据库

    Bandwagon 安装 Mysql 数据库 1.搬瓦工系统准备 建议使用版本Centos6 x86_64,安装完成后,使用远程登陆软件登陆. 2.安装编译工具及库文件 yum -y install ...

  5. 谈谈我近一个半月的dp练习

    前请提示:https://www.cnblogs.com/caiyishuai/p/9047991.html   配合这篇文章食用风味更佳哦! 首先十分感谢henry_y提供的50道dp练习,链接在这 ...

  6. POJ - 3660 Cow Contest(flod)

    题意:有N头牛,M个关系,每个关系A B表示编号为A的牛比编号为B的牛强,问若想将N头牛按能力排名,有多少头牛的名次是确定的. 分析: 1.a[u][v]=1表示牛u比牛v强,flod扫一遍,可以将所 ...

  7. Neo4j--常用的查询语句

    参考 https://www.w3cschool.cn/neo4j 准备工作 插入一堆朝代节点 插入我大明皇帝节点 创建大明皇帝统治大明王朝的关系 看一下结果 WHERE WHERE 语法 WHERE ...

  8. aliyun服务器lamp配置

    1.安装Apache:yum install httpd 2.安装php: yum install php 3.安装mysql客户端:yum install mysql 4.安装mysql服务端:yu ...

  9. zabbix添加主机步骤

    创建主机 配置基本信息 配置好后点击添加即可: [root@localhost opt]# systemctl start zabbix-agent [root@localhost opt]# net ...

  10. xhell ctrl+s 假死

    如题. ctrl+q 即可接触 假死状态. 记录下