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

我使用FHQ写了线段树2

虽然并没有任何的意义,但是我觉得很有意思,所以记录一下:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MN=1e6+116;
struct Node{int lc, rc, siz, rnd;int val, sum, addtag, multag;
}tr[MN];
int n, q, mod;
void pushup(int k){tr[k].siz=tr[tr[k].lc].siz+tr[tr[k].rc].siz+1;tr[k].sum=tr[tr[k].lc].sum+tr[tr[k].rc].sum+tr[k].val;
}
void pushdown(int k){if(tr[k].multag!=1){if(tr[k].lc){tr[tr[k].lc].val=(tr[tr[k].lc].val*tr[k].multag)%mod;tr[tr[k].lc].sum=(tr[tr[k].lc].sum*tr[k].multag)%mod;tr[tr[k].lc].addtag=(tr[tr[k].lc].addtag*tr[k].multag)%mod;tr[tr[k].lc].multag=(tr[tr[k].lc].multag*tr[k].multag)%mod;}if(tr[k].rc){tr[tr[k].rc].val=(tr[tr[k].rc].val*tr[k].multag)%mod;tr[tr[k].rc].sum=(tr[tr[k].rc].sum*tr[k].multag)%mod;tr[tr[k].rc].addtag=(tr[tr[k].rc].addtag*tr[k].multag)%mod;tr[tr[k].rc].multag=(tr[tr[k].rc].multag*tr[k].multag)%mod;			}tr[k].multag=1;}if(tr[k].addtag){if(tr[k].lc){tr[tr[k].lc].val=(tr[tr[k].lc].val+tr[k].addtag)%mod;tr[tr[k].lc].sum=(tr[tr[k].lc].sum+(tr[tr[k].lc].siz*tr[k].addtag)%mod)%mod;tr[tr[k].lc].addtag=(tr[tr[k].lc].addtag+tr[k].addtag)%mod;			}if(tr[k].rc){tr[tr[k].rc].val=(tr[tr[k].rc].val+tr[k].addtag)%mod;tr[tr[k].rc].sum=(tr[tr[k].rc].sum+(tr[tr[k].rc].siz*tr[k].addtag)%mod)%mod;	tr[tr[k].rc].addtag=(tr[tr[k].rc].addtag+tr[k].addtag)%mod;			}tr[k].addtag=0;}return;
}
void split(int k, int val, int &x, int &y){if(!k){x=0; y=0; return;}pushdown(k);if(tr[tr[k].lc].siz<val){x=k; val-=(tr[tr[k].lc].siz+1);split(tr[k].rc,val,tr[k].rc,y);}else{y=k; split(tr[k].lc,val,x,tr[k].lc);}pushup(k);
}
int merge(int x, int y){if(!x||!y) return x+y;if(tr[x].rnd<tr[y].rnd){pushdown(x);tr[x].rc=merge(tr[x].rc,y);pushup(x); return x;}else{pushdown(y);tr[y].lc=merge(x,tr[y].lc);pushup(y); return y;}
}
int root=0, tottt=0;
int Newnode(int val){++tottt;tr[tottt].siz=1;tr[tottt].rnd=rand();tr[tottt].multag=1;tr[tottt].sum=tr[tottt].val=val%mod;return tottt;
}
void insert(int val){root=merge(root,Newnode(val));
}
void Update_Add(int l, int r, int val){int x, y, z;split(root,r,x,y);split(x,l-1,x,z);tr[z].sum=(tr[z].sum+(tr[z].siz*val))%mod;tr[z].addtag=(tr[z].addtag+val)%mod;tr[z].val=(tr[z].val+val)%mod;pushdown(z);root=merge(merge(x,z),y);return;
}
void Update_Mul(int l, int r, int val){int x, y, z;split(root,r,x,y);split(x,l-1,x,z);tr[z].multag=(tr[z].multag*val)%mod;tr[z].val=(tr[z].val*val)%mod;tr[z].sum=(tr[z].sum*val)%mod;tr[z].addtag=(tr[z].addtag*val)%mod;pushdown(z);root=merge(merge(x,z),y);return;
}
int query(int l, int r){int x, y, z, res=0;split(root,r,x,y);split(x,l-1,x,z);res=tr[z].sum%mod;pushdown(z);root=merge(merge(x,z),y);return res;
}
void Solve(){cin>>n>>q>>mod;;for(int i=1; i<=n; ++i){int val; cin>>val;insert(val);}while(q--){int op, l, r, k;cin>>op>>l>>r;if(op==1){cin>>k;Update_Mul(l,r,k);}else if(op==2){cin>>k;Update_Add(l,r,k);}else{cout<<query(l,r)<<'\n';}}
}
signed main(){srand(time(0));ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);Solve();return 0;
}
http://www.jsqmd.com/news/25873/

相关文章:

  • 092_尚硅谷_for循环注意事项和细节(1)
  • 详细介绍:【网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程】
  • VK36N5D 工作电压 2.2-5.5V 触摸芯片抗干扰5键触摸触控 5路触摸检测IC
  • 魔兽争霸3冰封王座修改器 下载安装教程(图文步骤 + 功能详解)
  • Softmax回归模型
  • Oracle的connect by level在MySQL中的华丽变身 - 详解
  • handsontable实现新增删除行(双行)
  • 2025年国产角接触球轴承厂家推荐 一文了解轴承厂家选择标准
  • vxe-table 树形表格显示连接线的方式
  • 2025年上海衣帽间定制机构权威推荐榜单:衣帽间设计/衣帽间十大品牌/衣帽间装修源头公司精选
  • 在Web应用开发中状态到底是什么?
  • Cookie与缓存的区别
  • 2025 年铝卷厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析铝板铝卷/铝卷板/橘皮铝卷/压花铝卷/防锈铝卷/花纹铝卷公司推荐
  • 无人机航测界的强者——Pix4Dmapper 4.5.6使用教程+图文步骤
  • qml与html通信
  • 2025 年排烟风机厂家最新推荐榜,技术实力与市场口碑深度解析,筛选高性能低噪音优质企业屋顶/双速/离心式/防排烟风机公司推荐
  • 2025 年建筑模型公司最新推荐榜,技术实力与市场口碑深度解析含沙盘、微缩、高端模型品牌
  • Session、Cookie、Token 区别
  • 2025 年聚脲厂家最新推荐榜,技术实力与市场口碑深度解析,精选行业优质企业聚脲防腐/单组分双组分聚脲/MUL 聚脲/聚脲防水公司推荐
  • Flask零基础入门:5步搭建你的第一个Web应用
  • 2025 年红外测温仪厂家最新推荐榜,技术实力与市场口碑深度解析比色/感应加热/高性价比/单晶炉红外测温仪公司推荐
  • 2025 年真空计厂家最新推荐榜,技术实力与市场口碑深度解析,涵盖压阻硅、薄膜硅等多类型产品皮拉尼真空计/单晶炉真空计公司推荐
  • 2025年10月企业网站建设开发公司排行榜:前十名精选
  • 2025年企业网站建设开发公司口碑排行榜Top 10
  • 基于四元数的航天器自适应滑模控制(ASMC)设计
  • 浅记线性同余方程(组)
  • Cookie登录机制
  • 数据结构使用技巧
  • 2025密炼机设备推荐榜:大连华韩橡塑以技术创新与全球布局引领行业发展
  • 系统异步处理机制流程总结