https://nanti.jisuanke.com/t/42547

学习自https://www.cnblogs.com/zxytxdy/p/12375629.html

顺便复习了一下树状数组套主席树怎么写,上一次写好像是17年= =

要维护区间有哪些值,所以主席树搞搞,然后又因为要变化,显然就是套个树状数组在外面

然后这题关键是怎么求出区间所有值可组成的总和的mex

首先1不行的话,然后是2,然后由于12都行了,所以然后是3,再然后就是5,也就是说我们只要判断fibonacci数列上的数是否存在就行了,由于ai最大是2e5,所以暴力查询的次数并不会很多

复杂度是nlog^3 ,15s常数再大也够了,我的只在计蒜客上跑了1s多点

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxl=2e5+10;
const int len=2e5;int n,m,tot,cnt1,cnt2;
int a[maxl],rt[maxl*80],rt1[maxl*80],rt2[maxl*80];
struct node
{ll sum;int ls,rs;
}tr[maxl*80];inline void upd(int &o,int l,int r,int x,int val)
{if(!o) o=++tot;if(l==r){tr[o].sum+=val;return;}int mid=(l+r)>>1;if(x<=mid)upd(tr[o].ls,l,mid,x,val);elseupd(tr[o].rs,mid+1,r,x,val);tr[o].sum=tr[tr[o].ls].sum+tr[tr[o].rs].sum;
}inline void updbit(int i,int x,int val)
{while(i<=n)upd(rt[i],1,len,x,val),i+=i&-i;
}inline void prework()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)updbit(i,a[i],a[i]);
}inline void prert(int l,int r)
{cnt1=cnt2=0;for(int i=l-1;i;i-=i&-i)rt1[++cnt1]=rt[i];for(int i=r;i;i-=i&-i)rt2[++cnt2]=rt[i];
}inline ll ask(int l,int r,int k)
{ll ans=0;if(r==k){for(int i=1;i<=cnt1;i++)ans-=tr[rt1[i]].sum;for(int i=1;i<=cnt2;i++)ans+=tr[rt2[i]].sum;return ans;}int mid=(l+r)>>1;if(k<=mid){for(int i=1;i<=cnt1;i++)rt1[i]=tr[rt1[i]].ls;for(int i=1;i<=cnt2;i++)rt2[i]=tr[rt2[i]].ls;return ask(l,mid,k);}else{for(int i=1;i<=cnt1;i++)ans-=tr[tr[rt1[i]].ls].sum;for(int i=1;i<=cnt2;i++)ans+=tr[tr[rt2[i]].ls].sum;for(int i=1;i<=cnt1;i++)rt1[i]=tr[rt1[i]].rs;for(int i=1;i<=cnt2;i++)rt2[i]=tr[rt2[i]].rs;return ans+ask(mid+1,r,k);}
}inline void mainwork()
{for(int i=1;i<=m;i++){int op,x,y;scanf("%d%d%d",&op,&x,&y);if(op==1){updbit(x,a[x],-a[x]);a[x]=y;updbit(x,y,y);}else{ll now=1,s=0;while(1){prert(x,y);ll t=min(now,1ll*len);ll tmp=ask(1,len,t);if(tmp==s){printf("%lld\n",now);break;}s=tmp,now=s+1;}}}
}int main()
{prework();mainwork();return 0;
}

ICPC2019徐州 Yuuki and a problem 树套树相关推荐

  1. BZOJ3489 A simple rmq problem 【可持久化树套树】*

    BZOJ3489 A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一 ...

  2. 【BZOJ3489】A simple rmq problem(树套树)

    链接w:http://www.lydsy.com/JudgeOnline/problem.php?id=3489 题解:http://blog.csdn.net/PoPoQQQ/article/det ...

  3. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  4. P2617-Dynamic Rankings【树套树】

    正题 题目链接:https://www.luogu.com.cn/problem/P2617 题目大意 给出一个序列,要求支持 区间查询第kkk大 单点修改 解题思路 区间查询第kkk大需要使用主席树 ...

  5. P3332-[ZJOI2013]K大数查询【树套树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3332 题目大意 开始nnn个可以重复的集合,要求支持操作 1lrc:1\ l\ r\ c:1 l r c:将cc ...

  6. BZOJ 3262 cdq分治 OR 树套树

    注意判断 三个条件都一样的-- (CDQ分治 其实并不是很难理解 只是想不到--) CDQ分治: //By SiriusRen #include <cstdio> #include < ...

  7. 【Luogu】P3380树套树模板(线段树套Splay)

    题目链接 幸甚至哉,歌以咏志. 拿下了曾经是那么遥不可及的线段树,学会了曾经高不可攀的平衡树,弄懂了装B的时候才挂在嘴边的树套树. 每道模板都是链上的一颗珠子.把它们挨个串起来,就成为我成长的历程. ...

  8. #4604. The kth maximum number(整体二分 + 树套树)

    #4604. The kth maximum number 给定一个大小不超过5×1055 \times 10 ^ 55×105的矩形区域,有一些点有点权. 每次询问给定x1,y1,x2,y2,kx_ ...

  9. [树套树] 网络管理

    A:[CTSC2008]网络管理 此题本来是平衡树板块的,但俺写的是树套树,平衡树会多个log 题目 查询第kkk大,天然主席树可以维护 就不用了平衡树二分,多个logloglog了 将树上(u,v) ...

  10. jzoj5699-[GDOI2018day1]涛涛接苹果【树套树】

    正题 题目链接:https://gmoj.net/senior/#main/show/5699 题目大意 一棵树,每个节点有权值,每天所有权值会往它的父节点滑一位,然后有操作会在某一天的某个节点加权值 ...

最新文章

  1. 美国燃油管道商认怂,俄罗斯黑客收到500万美元赎金!,民众为抢汽油大打出手...
  2. 8种最坑的SQL错误用法,第一个就很坑?
  3. Glide 源码分析与面试提问
  4. poj 1186 方程的解数(线性探测再哈希)
  5. 科学计算:Python VS. MATLAB (1)----给我一个理由先
  6. python机械编程_机器学习编程作业3——多类分类(Python版)
  7. 音视频技术开发周刊 | 162
  8. 利用人工智能提升团队包容性
  9. python3 turtle 在哪下载安装_Python3 turtle安装和使用教程
  10. XML Drawable
  11. C++中sizeof和strlen
  12. 小云(云层-陈霁)的发展史
  13. Android studio教程:[6]创建多个Activity
  14. Chrome插件GitZip(下载github项目中的部分文件)
  15. 基于情感词典的网络文本情感倾向分类模型
  16. 智能优化算法应用:麻雀算法优化脉冲耦合神经网络的图像自动分割 -附代码
  17. 深度学习之残差网络原理深度刨析
  18. 天猫精灵控制Zigbee设备
  19. 定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square。
  20. 安卓终端神器Termux (后面还有Termux常用的快捷键,妥妥干货分享,记得点赞收藏哦!)

热门文章

  1. react中Suspense,EventEmitter的使用
  2. 百万邮做邮件营销的邮箱配置
  3. [详解] iphone手机备份、升级流程
  4. 小码哥php教程,小码哥Java从0到高级工程师
  5. HanLP中文分词、人名识别、地名识别
  6. 证明:$(g\circ f = e_X)\Rightarrow(g是满射)\wedge(f是单射)$
  7. 获取非行间样式和行间样式方法
  8. codevs 1138
  9. LeetCode12. 整数转罗马数字 / 剑指 Offer 40. 最小的k个数 / 剑指 Offer 41. 数据流中的中位数
  10. java中以yyyyMMddHHmmss格式取得系统时间