题意:

首先,考虑单点询问。
可以发现,每个点的贡献可以求出。
因此,把结果拆成两部分:
一部分是\(u\)对\(f_u,u\)的贡献。
一部分是询问\(u\)时,\(f_u\)的贡献。
这个容易维护。
再考虑询问最值:可以把问题转化为如下形式
有若干集合,每个集合有一个附加值。
集合中每个元素的实际值是它在集合中的值加上附加值。求所有元素最值。
支持各种修改,添加删除元素。
对每个元素维护一个set,再对每个集合的最值维护set即可。
这道题中,集合\(u\)就是所有满足\(f_x=u\)的\(x\)构成的集合。
代码:

#include <stdio.h>
#include <set>
#define inf 999999999999999999ll
#define ll long long
using namespace std;
int f[100010];ll he[100010],sz[100010];
struct SJd
{ll z,i;SJd(ll Z,int I){z=Z;i=I;}
};
bool operator<(const SJd&a,const SJd&b)
{if(a.z!=b.z)return a.z<b.z;return a.i<b.i;
}
ll min(const set<SJd>&se)
{if(se.empty())return inf;return (se.begin())->z;
}
ll max(const set<SJd>&se)
{if(se.empty())return -inf;set<SJd>::iterator it=se.end();it--;return it->z;
}
set<SJd> se[100010],ai,aa;int K[100010];ll mi[100010],ma[100010],az[100010];
void do_al(int i)
{ai.erase(SJd(mi[i],i));aa.erase(SJd(ma[i],i));mi[i]=min(se[i])+az[i];ma[i]=max(se[i])+az[i];ai.insert(SJd(mi[i],i));aa.insert(SJd(ma[i],i));
}
void cal(int i,int z,bool b=true)
{int k=K[i];se[f[i]].erase(SJd(he[i],i));he[i]+=z*(sz[i]-(sz[i]/k)*(k-1));if(b)se[f[i]].insert(SJd(he[i],i));do_al(f[i]);se[f[f[i]]].erase(SJd(he[f[i]],f[i]));he[f[i]]+=z*(sz[i]/k);se[f[f[i]]].insert(SJd(he[f[i]],f[i]));do_al(f[f[i]]);az[i]=sz[i]/k;do_al(i);
}
int main()
{int n,q;scanf("%d%d",&n,&q);for(int i=1;i<=n;i++){scanf("%lld",&sz[i]);K[i]=2;}for(int i=1;i<=n;i++){scanf("%d",&f[i]);K[f[i]]+=1;}for(int i=1;i<=n;i++)cal(i,1);for(int i=0;i<q;i++){int l;scanf("%d",&l);if(l==1){int x,y,od;scanf("%d%d",&x,&y);cal(f[x],-1);cal(x,-1,0);cal(y,-1);K[f[x]]-=1;K[y]+=1;od=f[x];f[x]=y;cal(od,1);cal(x,1);cal(y,1);}else if(l==2){int x;scanf("%d",&x);printf("%lld\n",he[x]+az[f[x]]);}elseprintf("%lld %lld\n",min(ai),max(aa));}return 0;
}

CF643D Bearish Fanpages相关推荐

  1. CodeForces:643(VK cup)

    文章目录 前言 CF643A Bear and Colors Description\text{Description}Description Solution\text{Solution}Solut ...

  2. IOI2020集训队作业-9 (CF538G, CF674D, ARC101F)

    A - CF538G Berserk Robot Sol 将原题中的坐标(x,y)(x,y)(x,y)变成(x+y,x−y)(x+y,x-y)(x+y,x−y),原题的行走一步改成(1,1),(1,− ...

  3. Java 蜡烛图_ta-lib 里的蜡烛图形态函数源码

    ta-lib 里的蜡烛图形态函数源码 以CDL2CROWS为例, 看一看c语言的源码: 有关的源码文件包括 d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_ ...

  4. 配对交易方法_COVID下的自适应配对交易,一种强化学习方法

    配对交易方法 Abstract 抽象 This is one of the articles of A.I. Capital Management's Research Article Series, ...

  5. 前馈神经网络中的前馈_前馈神经网络在基于趋势的交易中的有效性(1)

    前馈神经网络中的前馈 This is a preliminary showcase of a collaborative research by Seouk Jun Kim (Daniel) and ...

  6. 用于Power BI Desktop中的库存数据分析的烛台图

    Candlestick chart for stock data analysis in Power BI Desktop 用于Power BI Desktop中的库存数据分析的烛台图 Power B ...

  7. ta-lib 里的蜡烛图形态函数源码

    ta-lib 里的蜡烛图形态函数源码 以CDL2CROWS为例, 看一看c语言的源码: 有关的源码文件包括 d:\Documents\Pictures\ta-lib\c\src\ta_func\ta_ ...

  8. 净误差与遗漏为负值的含义_【双语】跳出“资本外逃”之争看净误差与遗漏

    本文首发于微信公众号:中国外汇.文章内容属作者个人观点,不代表和讯网立场.投资者据此操作,风险请自担. 作者丨管涛中国金融四十人论坛高级研究员 来源丨<中国外汇>2017年第15期 8月1 ...

  9. ai人工智能测面相 准吗_金融界的AI:如何最终开始相信自己的回测[1/3]

    ai人工智能测面相 准吗 模拟,风险和度量 (SIMULATIONS, RISKS, AND METRICS) Note from Towards Data Science's editors: Wh ...

  10. tsm9_Momentum_Ultimate Oscillators_MACDivergence index_Stochastic RSI_A/D Oscillator_RVI Vigor ADX

    The study of momentum and oscillators is the analysis of price changes rather than price levels. Amo ...

最新文章

  1. win7卸载打印机驱动
  2. [APIO2018] Duathlon 铁人两项
  3. c++ python opencv_ubuntu下C++与Python混编,opencv中mat类转换
  4. Pycharm启动后总是不停的updating indices...indexing
  5. 嵌套地狱_解决嵌套业务逻辑_使用Js的对象_避免数组嵌套---SpringCloud Alibaba_若依微服务框架改造_ElementUI---工作笔记016
  6. [LeetCode] 3Sum Closest
  7. innodb 共享表空间 转 独立表空间 详细说明
  8. ASP操作XML文件的主要方法和实现
  9. c++ opencv mat_【CV实战】OpenCV—Hello world代码示例
  10. java开源项目-六个经典的 SpringBoot 练手项目
  11. HTML与CSS案例——人物简介
  12. 东北大学《铸造工艺学》结课报告
  13. Qt QWidget 软件开发模版
  14. STM32开发环境搭建——Keil5
  15. IOS越狱流程,支持最高IOS12.1.2,包含未签名ipa的安装教程
  16. [分享]SQl语句学习专题
  17. 微信小程序被投诉怎么办?小妙招教给你
  18. HTML和CSS中如何判断ie各版本浏览器
  19. Linux 的chmod权限数字777、755、644代表什么?
  20. kubernetes 部署_kubernetes应用程序部署工具概述

热门文章

  1. 用户权限---u+s\g+s\o+t三个特殊权限说明
  2. JavaSE-接口简单介绍
  3. 通过S2B2C供应链电商平台网站解决方案,实现大宗商品万亿产业数字化转型
  4. 生成sis文件的诀窍
  5. ureport2报错/by zero的解决方法
  6. 手机变Android麦克风,【工具】手机秒变摄像头及麦克风方法
  7. el-form的model、prop属性和表单校验等详解
  8. android 开源fc模拟器_安卓FC模拟器NESemu
  9. python自动输入饥荒控制台代码
  10. 【Python表白小程序】七夕表白神器(赶紧收藏起来)