当前位置: 首页 > news >正文

题解:To the moon

题目传送门

题意分析

显然是维护一棵可持久化线段树。

\(1\leq n,m\leq 10^5\),很容易写完。但是发现空间限制 \(\text{64MB}\),需要卡空间。

先丢掉线段树中存储的节点边界,放入递归中传参。

然后考虑继续卡,将可持久化线段树的懒标记改为标记永久化,这样可以避免每次 down 都要新建两个节点。(当然你写回收也可以,不过不好写。)

AC 代码

//#include<bits/stdc++.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<string>
#include<vector>
#include<cmath>
#include<ctime>
#include<deque>
#include<queue>
#include<stack>
#include<list>
using namespace std;
typedef long long ll;
constexpr const int N=1e5,M=1e5;
int n,a[N+1];
struct segTree{int root[M+1],size;struct node{ll value,tag;int lChild,rChild;}t[N*25+1];int create(node x){t[++size]=x;return size;}int clone(int p){t[++size]=t[p];return size;}void up(int p){t[p].value=t[t[p].lChild].value+t[t[p].rChild].value;}int build(int l,int r){int p=create({});if(l==r){t[p].value=a[l];return p;}int mid=l+r>>1;t[p].lChild=build(l,mid);t[p].rChild=build(mid+1,r);up(p);return p;}int add(int p,int L,int R,int l,int r,int x){p=clone(p);t[p].value+=(min(r,R)-max(l,L)+1ll)*x;if(l<=L&&R<=r){t[p].tag+=x;return p;}int mid=L+R>>1;if(l<=mid){t[p].lChild=add(t[p].lChild,L,mid,l,r,x);}if(mid+1<=r){t[p].rChild=add(t[p].rChild,mid+1,R,l,r,x);}return p;}void add(int v,int i,int l,int r,int x){root[i]=add(root[v],1,n,l,r,x);}ll query0(int p,int L,int R,int l,int r){if(l<=L&&R<=r){
//			cout<<t[p].value<<" vbvbbvbvbbvk\n";return t[p].value;}ll ans=t[p].tag*(min(R,r)-max(L,l)+1ll);
//		cout<<"l="<<L<<" r="<<R<<" ans="<<ans<<" s="<<l<<" t="<<r<<" hqewuhwqiudquiwhuiwqhduwqhiud\n"; int mid=L+R>>1; if(l<=mid){ans+=query0(t[p].lChild,L,mid,l,r);}if(mid+1<=r){ans+=query0(t[p].rChild,mid+1,R,l,r);}
//		cout<<"l="<<L<<" r="<<R<<" ans="<<ans<<"\n";return ans;}ll query(int i,int l,int r){return query0(root[i],1,n,l,r);}void clear(){size=0;} 
}t;
int main(){/*freopen("test.in","r",stdin);freopen("test.out","w",stdout);*/ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int m;while(cin>>n>>m){t.clear();for(int i=1;i<=n;i++){cin>>a[i];}t.root[0]=t.build(1,n);int time=0;while(m--){char op;int l,r,x;cin>>op;switch(op){case 'C':cin>>l>>r>>x;time++;t.add(time-1,time,l,r,x);break;case 'Q':cin>>l>>r;cout<<t.query(time,l,r)<<'\n';break;case 'H':cin>>l>>r>>x;cout<<t.query(x,l,r)<<'\n';break;case 'B':cin>>x;time=x;break;}}cout<<'\n';} cout.flush();/*fclose(stdin);fclose(stdout);*/return 0;
}
http://www.jsqmd.com/news/364728/

相关文章:

  • 【观察】联想数据网络训推一体解决方案:三位一体,铸就“全能ACE”
  • 如何把CAD左下角的坐标系原点移动到圆的中心?
  • 如何隐藏CAD中不常用的图幅样式?
  • 2026好用的护发精油推荐:修护干枯毛躁,提升发丝顺滑度 - 品牌排行榜
  • 6款AI写论文神器实测:5分钟生成25000字问卷类论文+自动生成高信度数据,论文写作不再愁! - 麟书学长
  • 2026年推荐适合烫发的护发精油,告别干枯毛躁 - 品牌排行榜
  • 2026哪家PLC编程培训机构培训后有用?行业真实选择参考 - 品牌排行榜
  • 2026年PLC编程培训机构哪家好?综合实力对比推荐 - 品牌排行榜
  • 2026哪家无人机培训机构可以考证?资质与口碑解析 - 品牌排行榜
  • 2026学生党护发精油推荐:平价好用的修护神器 - 品牌排行榜
  • 2026年无人机培训哪家费用优惠?多家机构对比分析 - 品牌排行榜
  • 2026板材品牌排名:环保与技术双优的行业标杆推荐 - 品牌排行榜
  • 2026无人机培训机构哪家好?行业口碑机构推荐 - 品牌排行榜
  • 2026全屋定制板材品牌排行榜 环保性能与品质之选 - 品牌排行榜
  • 408真题解析-2010-34-计算机网络-分组交换网络传输时延
  • 2026专业的油净化回用企业推荐及行业洞察 - 品牌排行榜
  • python如何run和debug程序
  • 2026油田回注水厂家哪家比较好?实力品牌推荐 - 品牌排行榜
  • 怎么联系黑奥秘专业头皮健康管理服务 - 品牌排行榜
  • 2026头皮健康管理选择:黑奥秘靠谱吗 - 品牌排行榜
  • 2026黑奥秘养发加盟立即咨询 探索头皮健康创业新方向 - 品牌排行榜
  • 2026年黑奥秘脱发白发理疗咨询电话及专业服务指南 - 品牌排行榜
  • 2026年黑奥秘加盟官网电话获取,头皮健康领域创业新方向 - 品牌排行榜
  • 【系统分析师】7.4 软件过程管理
  • 深度解析五羊-本田前端开发工程师职位:技术全景与面试指南
  • dotnet Vortice 无需交换链与 DirectComposition 对接渲染层
  • 2026年2月工业废水处理聚丙烯酰胺厂家推荐,高难度废水专用 - 品牌鉴赏师
  • 读数字时代的网络风险管理:策略、计划与执行13AI及其他(下)
  • 连通分量(connected component)
  • Typora 如何更改字体的颜色