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

FHQ-Treap模板

普通平衡树:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <time.h>
#include <random>
#define int long long
#define N 100005
#define M 25
using namespace std;
mt19937_64 rd(time(0));
struct fhq_treap{int cnt = 0,rt;struct node{int lson,rson,val,k,sz;}tr[N * M];#define ls(x) tr[x].lson#define rs(x) tr[x].rsonint build(int val) {tr[++cnt].val = val,tr[cnt].lson = tr[cnt].rson = 0;tr[cnt].sz = 1,tr[cnt].k = rd();return cnt;}void pushup(int x) {tr[x].sz = tr[ls(x)].sz + tr[rs(x)].sz + 1;}void split(int cur,int x,int &a,int &b) {if (cur == 0) return a = b = 0,void();if (tr[cur].val <= x) a = cur,split(rs(cur),x,rs(cur),b);else b = cur,split(ls(cur),x,a,ls(cur));pushup(cur);}void split_sz(int cur,int x,int &a,int &b) {if (cur == 0) return a = b = 0,void();if (tr[ls(cur)].sz + 1 <= x) a = cur,split_sz(rs(cur),x - tr[ls(cur)].sz - 1,rs(cur),b);else b = cur,split_sz(ls(cur),x,a,ls(cur));pushup(cur);}int merge(int a,int b) {if (!a || !b) return a + b;if (tr[a].k < tr[b].k) return tr[a].rson = merge(tr[a].rson,b),pushup(a),a;else return tr[b].lson = merge(a,tr[b].lson),pushup(b),b;}void insert(int val) {int x,y;split(rt,val,x,y);rt = merge(merge(x,build(val)),y);}void del(int val) {int x,y,z;split(rt,val,x,y);split(x,val - 1,x,z);rt = merge(merge(x,merge(tr[z].lson,tr[z].rson)),y);}int find(int val) {int x,y;split(rt,val - 1,x,y);int ans = tr[x].sz + 1;rt = merge(x,y);return ans;}int querykth(int k) {int x,y,z;split_sz(rt,k - 1,x,y);split_sz(y,1,z,y);int ans = tr[z].val;rt = merge(merge(x,z),y);return ans;}int find_before(int val) {int x,y,z;split(rt,val - 1,x,y);// split_sz(x,tr[x].sz,x,z);int p = x;while(tr[p].rson) p = tr[p].rson;int ans = tr[p].val;// rt = merge(merge(x,z),y);rt = merge(x,y);return ans;}int find_after(int val) {int x,y,z;split(rt,val,x,y);int p = y;// split_sz(y,1,z,y);while(tr[p].lson) p = tr[p].lson;int ans = tr[p].val;rt = merge(x,y);// rt = merge(merge(x,z),y);return ans;}
}t;
// fhq_treap::node t=1;
int T;
signed main(){cin >> T;for (int op,x,lstans = 0;T --;) {scanf("%lld%lld",&op,&x);if (op == 1) t.insert(x);else if (op == 2) t.del(x);else if (op == 3) lstans = t.find(x);else if (op == 4) lstans = t.querykth(x);else if (op == 5) lstans = t.find_before(x);else lstans = t.find_after(x);if (op != 1 && op != 2) printf("%lld\n",lstans);}return 0;
}

文艺平衡树:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <random>
#include <time.h>
#define int long long
#define N 100005
using namespace std;
int n,m;
mt19937_64 rd(time(0));
struct fhq_treap{int cnt = 0,rt;struct node{int lson,rson,val,k,sz;}tr[N * 25];int lz[N * 25];#define ls(x) tr[x].lson#define rs(x) tr[x].rsonint build(int val) {tr[++cnt].val = val,tr[cnt].lson = tr[cnt].rson = 0,tr[cnt].sz = 1,tr[cnt].k = rd();return cnt;}void pushup(int x) {tr[x].sz = tr[ls(x)].sz + tr[rs(x)].sz + 1;}void pushdown(int x) {swap(tr[x].lson,tr[x].rson);lz[x] = 0,lz[ls(x)] ^= 1,lz[rs(x)] ^= 1;}void split(int cur,int x,int &a,int &b) {if (cur == 0) return a = b = 0,void();if (lz[cur]) pushdown(cur);if (tr[ls(cur)].sz + 1 <= x) a = cur,split(rs(cur),x - tr[ls(cur)].sz - 1,rs(cur),b);else b = cur,split(ls(cur),x,a,ls(cur));pushup(cur);}int merge(int a,int b) {if (!a || !b) return a + b;if (tr[a].k < tr[b].k) {if (lz[a]) pushdown(a);tr[a].rson = merge(tr[a].rson,b),pushup(a);return a;}else {if (lz[b]) pushdown(b);tr[b].lson = merge(a,tr[b].lson),pushup(b);return b;}}void insert(int val) {int x,y;split(rt,val,x,y);rt = merge(merge(x,build(val)),y);}void debug(int cur) {if (cur == 0) return ;printf("%lld %lld %lld %lld\n",cur,tr[cur].lson,tr[cur].rson,lz[cur]);debug(tr[cur].lson),debug(tr[cur].rson);}void getans(int cur) {if (cur == 0) return;if (lz[cur]) pushdown(cur);getans(ls(cur));printf("%lld ",tr[cur].val);getans(rs(cur));}
}t;
signed main(){cin >> n >> m;for (int i = 1;i <= n;i ++) t.insert(i);for (int l,r;m --;) {scanf("%lld%lld",&l,&r);int x,y,z;t.split(t.rt,r,x,y);t.split(x,l - 1,x,z);t.lz[z] ^= 1;t.rt = t.merge(t.merge(x,z),y);// t.debug(t.rt);}t.getans(t.rt);return 0;
}
http://www.jsqmd.com/news/419828/

相关文章:

  • 安吉龙山源陵园联系方式:背景了解与联系前准备 - 十大品牌推荐
  • 安吉龙山源陵园联系方式:官方渠道汇总与参考 - 十大品牌推荐
  • 读人工智能全球格局:未来趋势与中国位势17专家视角(上)
  • 安吉龙山源陵园联系方式:基本信息获取与注意事项 - 十大品牌推荐
  • 安吉龙山源陵园联系方式:服务咨询途径与须知 - 十大品牌推荐
  • 安吉龙山源陵园联系方式:客观介绍与通用建议 - 十大品牌推荐
  • 从误报率30%到2%!我用Transformer搭了个工业级爬虫流量检测模型,全流程实战
  • 刘教链|中本聪表示反对
  • 安吉龙山源陵园联系方式:主要联系渠道与相关说明 - 十大品牌推荐
  • AC-AIBot 全局记忆与大屏模式:AI 助手终于有了真正的“记性“
  • WinClaw 福利大放松:200万token每天用
  • 【转型】低频量化周报(指数风险溢价比,配债完整数据集,可转债策略,上市公司礼品,交易总结)
  • 2008-2025年上市公司固定资产加速折旧DID数据
  • 2000-2024年上市公司环境不确定性测算数据+Stata代码
  • 集合算法-动态数组、哈希表、队列、栈
  • z变换的z平面的理解
  • 2026年耐用型太阳能热水器厂家综合评估与优选指南 - 2026年企业推荐榜
  • Agent如何颠覆未来?一文揭秘智能体技术的核心变革与热门应用场景
  • 2026年北京陪诊公司电话推荐:核心服务与联系渠道 - 十大品牌推荐
  • 2026年研发管理软件推荐:数据驱动效能优化评测,涵盖DevOps与多项目统筹场景 - 十大品牌推荐
  • 2026年中国自助棋牌室加盟行业深度测评与决策指南:价值链重塑下的品牌优选 - 2026年企业推荐榜
  • 【信息科学与工程学】【财务管理】第一篇 商业模式与分工重构策略框架01
  • 2026年研发管理软件推荐:DevOps一体化趋势评测,涵盖大规模多项目统筹效能痛点 - 十大品牌推荐
  • 讲讲金鹏搪瓷管空气预热器口碑如何,山东江苏等地使用反馈好吗 - 工业品牌热点
  • 2026年一季度合肥流态固化土/流态固化土外加剂/流态固化土盾构注浆液/流态固化土盾构砂浆/泡沫混凝土/泥土固化剂厂家综合选购指南 - 2026年企业推荐榜
  • 不同生命阶段猫粮怎么选?2026年猫粮产品推荐与细致评价,解决营养错配与过渡难题 - 十大品牌推荐
  • 研发管理软件哪个工具好?2026年研发管理软件推荐与排名,解决扩展性与安全核心痛点 - 十大品牌推荐
  • 2026年徐州全屋定制/储物柜/卧室套装/衣柜衣橱/厨房橱柜厂家市场竞争格局深度分析报告 - 2026年企业推荐榜
  • Flutter手势交互全解析:从GestureDetector到InkWell,打造流畅的鸿蒙应用体验
  • 盘点温州好用的洁净板漆面修复品牌,杰升净化值得推荐吗? - 工业推荐榜