P5494-[模板]线段树分裂

正题

题目链接:https://www.luogu.com.cn/problem/P5494


题目大意

给出一个可重集合要求支持

  • 将集合ppp中在[l,r][l,r][l,r]的数放到一个新的集合中
  • 将集合ttt的所有数放入集合ppp
  • 在集合ppp中放入xxxppp
  • 查询集合ppp中在[l,r][l,r][l,r]区间的数
  • 查询集合ppp中第kkk小的数

1≤n,m≤2×1051\leq n,m\leq 2\times 10^51n,m2×105


解题思路

考虑怎么分裂,就照着一个位置pospospos做下去顺路一直开新节点,往左走时把右节点给新的节点就好了。

然后分裂两次再把左右合并就好了。

时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10,M=N<<5;
ll n,m,tot,rt[N];
ll cnt,w[M],ls[M],rs[M];
void Change(ll &x,ll L,ll R,ll pos,ll val){if(!x)x=++cnt;if(L==R){w[x]+=val;return;}ll mid=(L+R)>>1;if(pos<=mid)Change(ls[x],L,mid,pos,val);else Change(rs[x],mid+1,R,pos,val);w[x]=w[ls[x]]+w[rs[x]];return;
}
ll Ask(ll x,ll L,ll R,ll l,ll r){if(!x)return 0;if(L==l&&R==r){return w[x];}ll mid=(L+R)>>1;if(r<=mid)return Ask(ls[x],L,mid,l,r);if(l>mid)return Ask(rs[x],mid+1,R,l,r);return Ask(ls[x],L,mid,l,mid)+Ask(rs[x],mid+1,R,mid+1,r);
}
ll Bsk(ll x,ll L,ll R,ll k){if(L==R)return L;ll mid=(L+R)>>1;if(w[ls[x]]>=k)return Bsk(ls[x],L,mid,k);return Bsk(rs[x],mid+1,R,k-w[ls[x]]);
}
ll Merge(ll x,ll y){if(!x||!y)return x+y;ls[x]=Merge(ls[x],ls[y]);rs[x]=Merge(rs[x],rs[y]);w[x]=w[x]+w[y];return x;
}
ll Split(ll x,ll L,ll R,ll pos){if(!x)return 0;ll y=++cnt,mid=(L+R)>>1;if(L==R)return y;if(pos<=mid)swap(rs[x],rs[y]);if(L==R)return y;if(pos<=mid)ls[y]=Split(ls[x],L,mid,pos);else rs[y]=Split(rs[x],mid+1,R,pos);w[x]=w[ls[x]]+w[rs[x]];w[y]=w[ls[y]]+w[rs[y]];return y;
}
signed main()
{scanf("%lld%lld",&n,&m);tot=1;for(ll i=1;i<=n;i++){ll x;scanf("%lld",&x);if(x)Change(rt[1],0,n,i,x);}while(m--){ll op;scanf("%lld",&op);if(op==0){ll p,x,y;scanf("%lld%lld%lld",&p,&x,&y);++tot;rt[tot]=rt[p];rt[p]=Split(rt[p],0,n,x-1);rt[tot]=Merge(rt[tot],Split(rt[p],0,n,y));swap(rt[p],rt[tot]);}else if(op==1){ll p,t;scanf("%lld%lld",&p,&t);rt[p]=Merge(rt[p],rt[t]);}else if(op==2){ll p,x,q;scanf("%lld%lld%lld",&p,&x,&q);Change(rt[p],0,n,q,x);}else if(op==3){ll p,x,y;scanf("%lld%lld%lld",&p,&x,&y);printf("%lld\n",Ask(rt[p],0,n,x,y));}else if(op==4){ll p,k;scanf("%lld%lld",&p,&k);if(w[rt[p]]<k){puts("-1");continue;}printf("%lld\n",Bsk(rt[p],0,n,k));}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

暑期训练待补

2021牛客暑期多校训练营5 C-Cheating and Stealing 繁琐 F-Finding Points 计算几何 I-Interval Queries 回滚莫队链表 2021牛客暑期多校训练营6 D-Gambling Monster FWT G-Hasse Diagram min25筛 2021牛客暑期多校训练营7 A-xay loves connected graphs多项式&#xff1f…

微软推出 VS Code 新特性,为 TypeScript 和 JavaScript 用户提供 AI 辅助开发功能

除了开发人员非常喜欢的IntelliSense和代码完成之外&#xff0c;今年早些时候&#xff0c;微软还发布了IntelliCode&#xff0c;提供了一组 AI 辅助开发功能。VS Code 团队现在宣布了一项新的实验性扩展&#xff0c;将 IntelliCode 带给了 TypeScript 和 JavaScript 用户。VS C…

NC107617 poj3020 Antenna Placement

问题&#xff1a; n * m的矩阵&#xff0c;有一些障碍点&#xff0c;用12的骨牌覆盖所有非障碍点 (12骨牌可重叠&#xff0c;骨牌可越界&#xff0c;骨牌可延伸到障碍点) 问最少需要 多少个。 题解&#xff1a; • 尽量用一个骨牌覆盖两个格子&#xff0c;覆盖不了了再重叠使…

P7737-[NOI2021]庆典【tarjan,虚树】

正题 题目链接:https://www.luogu.com.cn/problem/P7737 题目大意 给出一张无向图满足若x⇒z,y⇒zx\Rightarrow z,y\Rightarrow zx⇒z,y⇒z那么有x⇒yx\Rightarrow yx⇒y或y⇒xy\Rightarrow xy⇒x。 qqq次询问给出起点和终点和kkk条临时的边&#xff0c;求可能经过点的数量 1…

货车运输(洛谷P1967)(倍增)

传送门 文章目录题目描述题目解析代码题目描述 题目解析 本题如果告诉你&#xff0c;城市形成了一棵树&#xff0c;是不是就迎刃而解了呢? 本题的关键就是把稠密图转化为一片森林&#xff08;就是可能有很多棵树啦&#xff09; 怎么转化呢? 考虑哪些边是没用的 如果AB已经可…

.NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发

上篇给大家从零开始搭建了一个我们的ASP.NET Core CMS系统的开发框架&#xff0c;具体为什么那样设计我也已经在第十篇文章中进行了说明。不过文章发布后很多人都说了这样的分层不是很合理&#xff0c;什么数据库实体应该跟仓储放在一起形成领域对象&#xff0c;什么ViewModel应…

P7736-[NOI2021]路径交点【LGV引理】

正题 题目链接:https://www.luogu.com.cn/problem/P7736 题目大意 有kkk层的图&#xff0c;第iii层有nin_ini​个点&#xff0c;每层的点从上到下排列&#xff0c;层从左到右排列。再给出连接相邻层的一些有向边&#xff08;从iii层连向i1i1i1层&#xff09;。 对于n1n_1n1​…

第1节 连通性强连通、割点和桥(一)

文章目录无向图割点、桥、双连通分量Tarjan算法求割点和桥&#xff08;割边&#xff09;代码&#xff1a;边双连通分量 和 点双连通分量代码边双连通分量 和 点双连通分量 的缩点有向图的弱连通与强连通强连通分量Kosaraju算法Tarjan算法代码&#xff1a;无向图割点、桥、双连通…

暗黑破坏神(背包)(内部模拟)

不开longlong见祖宗&#xff01;&#xff01;&#xff01; scanf要打成lld&#xff01;&#xff01;&#xff01;&#xff01; 解析 分层背包的类板子题&#xff0c;更新dp过程中记录路径&#xff0c;最后递归输出即可 然而—— 一开始被卡成了27分&#xff01;&#xff01;…

UOJ#454-[UER #8]打雪仗【通信题】

正题 题目链接:https://uoj.ac/problem/454 题目大意 AliceAliceAlice有一个长度为2n2n2n的010101串&#xff0c;BobBobBob有nnn个在[1,2n][1,2n][1,2n]位置的下标表示它想要得到010101串中这些位置的值&#xff0c;现在两个人可以向对方传输不超过mmm个0/10/10/1字符&#xf…

第1节 连通性强连通、割点和桥 例题

NC15707 可达性 题目&#xff1a; 给出一个 0 ≤ N ≤ 105 点数、0 ≤ M ≤ 105 边数的有向图&#xff0c; 输出一个尽可能小的点集&#xff0c;使得从这些点出发能够到达任意一点&#xff0c;如果有多个这样的集合&#xff0c; 输出这些集合升序排序后字典序最小的。 题解:…

最大乘积(记忆化搜索)

题目描述 给一段数列&#xff0c;用k个乘号分开&#xff0c;求所得最大值 n<10! 解析 这样就不用写高精啦 枚举第一个乘号的位置递归记忆化搜索即可 问题&#xff01; 一开始边界条件写了一个这个&#xff1a; if(n-st<k) return -2e15;这样使这样的情况强制非法 但…

Loj#6503-「雅礼集训 2018 Day4」Magic【分治NTT】

正题 题目链接:https://loj.ac/p/6503 题目大意 nnn张卡mmm种&#xff0c;第iii种卡有aia_iai​张&#xff0c;求所有排列中有kkk对相邻且相同的卡牌。 1≤n≤105,0≤k≤105,1≤m≤20000,∑i1main1\leq n\leq 10^5,0\leq k\leq 10^5,1\leq m\leq 20000,\sum_{i1}^ma_in1≤n≤1…

连通性(相关练习)

文章目录NC20603 [ZJOI2007]最大半连通子图题目&#xff1a;题解&#xff1a;代码&#xff1a;NC50403 嗅探器题目&#xff1a;题解&#xff1a;代码&#xff1a;NC51269 Network of Schools题目&#xff1a;题解&#xff1a;代码&#xff1a;NC106972 Cow Ski Area题目&#x…

ASP.NET Core WebAPI中使用JWT Bearer认证和授权

为什么是 JWT BearerASP.NET Core 在 Microsoft.AspNetCore.Authentication 下实现了一系列认证, 包含 Cookie, JwtBearer, OAuth, OpenIdConnect 等,Cookie 认证是一种比较常用本地认证方式, 它由浏览器自动保存并在发送请求时自动附加到请求头中, 更适用于 MVC 等纯网页系统的…

判断溢出(ybtoj-字符串)

文章目录题目描述输入格式输出格式样例输入样例输出数据范围解析注意代码题目描述 我们将给你一些数和一个数据类型&#xff0c;你需要判断&#xff0c;如果将这些数连续相乘起来&#xff0c;将会在第几个数出现溢出的情况。 输入格式 多组数据。 第一行只有一个整数&#x…

2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)

前言 依旧是白嫖账号&#xff0c;只打了一些题/kk 正题 1002 Buying Snacks 题目大意 nnn个物品&#xff0c;每个可以买一次也可以不买&#xff0c;如果买需要选择1/21/21/2块钱的&#xff0c;然后也可以相邻两个一起买并且减少一块的花销&#xff0c;求恰好用掉mmm块钱的方案…

分羊(区间dp:分治与决策单调性优化)

文章目录题目描述样例输入样例输出解析代码题目描述 给你一个数列&#xff0c;分成m段&#xff0c;每段的价值为相同数对的对数 求最小价值和 样例输入 10 2 1 2 1 2 1 2 1 2 1 2 样例输出 8 解析 容易想到区间dp 定义dp[i][j]:把前i个数分成j段的最小价值 那么枚举最后一段…

网络流专题(最大流与费用流)(一)

流量网络 • 想要将一些水从S运到T&#xff0c;必须经过一些水站&#xff0c;链接水站的是管道&#xff0c;每条管道都有它的最大能容纳的水量&#xff0c;求最多S到T能流多少流量。 基本概念 • 这是一个典型的网络流模型。我们先了解网络流的有关定义和概念。 • 若有向图G(…

eShopOnContainers 看微服务 ①:总体概览

一、简介eShopOnContainers是一个简化版的基于.NET Core和Docker等技术开发的面向微服务架构的参考应用。该参考应用是一个简化版的在线商城/电子商务微服务参考示例应用。其包含基于浏览器的Web应用、基于Xamarin的Android、IOS、Windows/UWP 移动应用&#xff0c;以及服务端应…