尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P4148 简单题 模板题分析

P4148 简单题 模板题分析
📅 发布时间:2026/6/19 21:21:31

供自己复习使用,因此只贴代码。

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

代码

时间复杂度 \(\mathcal{O}(n\sqrt n)\)。

#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#define int long long
#define N 200005
#define isdigit(ch) ('0' <= ch && ch <= '9')
using namespace std;
template<typename T>
void read(T&x) {x = 0;int f = 1;char ch = getchar();for (;!isdigit(ch);ch = getchar()) f = (ch == '-' ? -1 : f);for (;isdigit(ch);ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48);x *= f;
}
const double alpha = 0.75;
struct node{int lson,rson;int d[2],mnd[2],mxd[2];int val,sum,sz;
}tr[N];
#define ls(x) (tr[x].lson)
#define rs(x) (tr[x].rson)
int root,cnt;
int g[N],tot;
void pushup(int x) {tr[x].sz = tr[ls(x)].sz + tr[rs(x)].sz + 1;tr[x].sum = tr[ls(x)].sum + tr[rs(x)].sum + tr[x].val;for (int i = 0;i < 2;i ++) {tr[x].mnd[i] = tr[x].mxd[i] = tr[x].d[i];tr[x].mnd[i] = min(min(tr[x].mnd[i],tr[ls(x)].mnd[i]),tr[rs(x)].mnd[i]);tr[x].mxd[i] = max(max(tr[x].mxd[i],tr[ls(x)].mxd[i]),tr[rs(x)].mxd[i]);}
}
void flatten(int cur) {if (!cur) return;flatten(ls(cur));g[++tot] = cur;flatten(rs(cur));
}
int build(int l,int r,int k) {if (l > r) return 0;int mid = l + r >> 1;nth_element(g + l,g + mid,g + r + 1,[k](int x,int y) {return tr[x].d[k] < tr[y].d[k];});int now = g[mid];tr[now].lson = build(l,mid - 1,k ^ 1),tr[now].rson = build(mid + 1,r,k ^ 1);pushup(now);return now;
}
void insert(int &now,int x,int y,int val,int k) {if (!now) {now = ++cnt;tr[now].lson = tr[now].rson = 0;tr[now].d[0] = x,tr[now].d[1] = y;tr[now].val = tr[now].sum = val;tr[now].sz = 1;tr[now].mnd[0] = tr[now].mxd[0] = x;tr[now].mnd[1] = tr[now].mxd[1] = y;return;}if (tr[now].d[0] == x && tr[now].d[1] == y) {tr[now].val += val;tr[now].sum += val;return ;}if ((k == 0 && x < tr[now].d[0]) || (k == 1 && y < tr[now].d[1])) insert(ls(now),x,y,val,k ^ 1);else insert(rs(now),x,y,val,k ^ 1);pushup(now);if (tr[ls(now)].sz > 1.0 * tr[now].sz * alpha || tr[rs(now)].sz > 1.0 * tr[now].sz * alpha) {tot = 0;flatten(now);now = build(1,tot,k);}
}
int query(int now,int x1,int y1,int x2,int y2) {if (!now) return 0;if (tr[now].mnd[0] >= x1 && tr[now].mxd[0] <= x2 && tr[now].mnd[1] >= y1 && tr[now].mxd[1] <= y2) return tr[now].sum;if (tr[now].mxd[0] < x1 || tr[now].mnd[0] > x2 || tr[now].mxd[1] < y1 || tr[now].mnd[1] > y2) return 0;int res = 0;if (tr[now].d[0] >= x1 && tr[now].d[0] <= x2 && tr[now].d[1] >= y1 && tr[now].d[1] <= y2) res += tr[now].val;return res + query(ls(now),x1,y1,x2,y2) + query(rs(now),x1,y1,x2,y2);
}
signed main(){tr[0].mnd[0] = tr[0].mnd[1] = 1e9;tr[0].mxd[0] = tr[0].mxd[1] = -1e9;int n;cin >> n;for (int lst = 0;1;) {int op,x,y,a,x2,y2;read(op);if (op == 1) {read(x),read(y),read(a);x ^= lst,y ^= lst,a ^= lst;insert(root,x,y,a,0);}else if (op == 2) {read(x),read(y),read(x2),read(y2);x ^= lst,y ^=lst,x2 ^= lst,y2 ^= lst;lst = query(root,x,y,x2,y2);printf("%lld\n",lst);}else return 0;}return 0;
}

相关新闻

  • Windows系统增强神器!PowerToys微软官方效率工具(实操v教程)!
  • Linux内核实验-ubuntu
  • 2025年11月四川自习室加盟市场分析与品牌推荐

最新新闻

  • 全国学历提升继续教育学习体验实录
  • 验证码绕过实战:从Pikachu靶场剖析客户端与服务端漏洞原理
  • Mission Planner终极指南:5步掌握开源无人机地面站专业飞行控制
  • Gemini大模型系列技术解析与真实能力边界
  • 修复kkFileView XSS漏洞与POI文件预览兼容性问题实战
  • 弱监督学习与概率提示技术在3D目标检测中的应用

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号