P3710 方方方的数据结构(kd-tree)

解析

写吐了…

一开始觉得线段树分治直接做就行简直是个伞兵题,写完挂掉才想起来线段树分治会打乱操作顺序导致全假…
重构吧!
炸裂之下去贺题解,std做法 O(mmlog⁡m)O(m\sqrt m\log m)O(mmlogm) 令人谔谔,但kd-tree做法确实挺伞兵的,懊恼为啥没有想到。
写完交后发现MLE成20,用现成的datamaker跑个1000的数据发现就开了7e5个点???
…原来矩形修改开虚点复杂度会假掉啊,我直接一种植物。
重构吧!
…终于过了。
思维还是要灵活,这个转二维数点其实挺直观的。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned ll
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read() {ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-') f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}const int N=2e5+100;
const double inf=1e18;
const int mod=998244353;inline ll ksm(ll x,ll k){ll res=1;while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}int n,m;struct tag{ll mul,add;  
}I=(tag){1,0};
tag operator + (const tag x,const tag y){return (tag){x.mul*y.mul%mod,(x.add*y.mul+y.add)%mod};
}struct pt{int x[2];
}q[N];
int num;
int F;
bool operator < (const pt &x,const pt &y){return x.x[F]<y.x[F];}
struct tree{int ch[2];int l[2],r[2];pt o;tag ans,laz;
}tr[N];
inline void pushup(int k){tr[k].l[0]=tr[k].r[0]=tr[k].o.x[0];tr[k].l[1]=tr[k].r[1]=tr[k].o.x[1];for(int o=0;o<=1;o++){int son=tr[k].ch[o];if(!son) continue;for(int d=0;d<=1;d++){tr[k].l[d]=min(tr[k].l[d],tr[son].l[d]);tr[k].r[d]=max(tr[k].r[d],tr[son].r[d]);}}return;
}
inline void Add(int k,const tag &o){if(!k) return;tr[k].ans=tr[k].ans+o;tr[k].laz=tr[k].laz+o;
}
inline void pushdown(int k){Add(tr[k].ch[0],tr[k].laz);Add(tr[k].ch[1],tr[k].laz);tr[k].laz=I;
}
int tot;
int build(int l,int r,int d){if(l>r) return 0;int now=++tot,mid=(l+r)>>1;F=d;  nth_element(q+l,q+mid,q+r+1);tr[now].o=q[mid];tr[now].ans=tr[now].laz=I;tr[now].ch[0]=build(l,mid-1,d^1);tr[now].ch[1]=build(mid+1,r,d^1);pushup(now);return now;
}
struct node{int l[2],r[2];
};
void upd(int k,const node &o,const tag &w){if(!k) return;if(o.l[0]>tr[k].r[0]||o.r[0]<tr[k].l[0]||o.l[1]>tr[k].r[1]||o.r[1]<tr[k].l[1]) return;if(o.l[0]<=tr[k].l[0]&&tr[k].r[0]<=o.r[0]&&o.l[1]<=tr[k].l[1]&&tr[k].r[1]<=o.r[1]){Add(k,w);return;}pushdown(k);if(o.l[0]<=tr[k].o.x[0]&&tr[k].o.x[0]<=o.r[0]&&o.l[1]<=tr[k].o.x[1]&&tr[k].o.x[1]<=o.r[1])tr[k].ans=tr[k].ans+w;upd(tr[k].ch[0],o,w);upd(tr[k].ch[1],o,w);
}
ll ans[N];
void getans(int k){if(!k) return;ans[tr[k].o.x[1]]=tr[k].ans.add;pushdown(k);getans(tr[k].ch[0]);getans(tr[k].ch[1]);return;
}int op[N],l[N],r[N],val[N],pos[N],tim[N];
signed main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifn=read();m=read();  for(int i=1;i<=m;i++){op[i]=read();if(op[i]<=2){l[i]=read();r[i]=read();val[i]=read();tim[i]=m;}else if(op[i]==3){      pos[i]=read();q[++num]=(pt){pos[i],i};}else tim[read()]=i;   }int rt=build(1,num,0);for(int i=1;i<=m;i++){if(op[i]<=2){tag w=I;if(op[i]==1) w.add=val[i];else w.mul=val[i];node o;o.l[0]=l[i];o.r[0]=r[i];o.l[1]=i;o.r[1]=tim[i];//printf("upd: (%d %d) (%d %d) mul=%d add=%d\n",o.l[0],o.r[0],o.l[1],o.r[1],mul,add);upd(rt,o,w);}}getans(rt);for(int i=1;i<=m;i++){if(op[i]==3) printf("%lld\n",ans[i]);}debug("tot=%d\n",tot);return 0;
}
/**/

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

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

相关文章

[POJ 3709] K-Anonymous Sequence(斜率优化dp / 动态维护凸包)

K-Anonymous Sequence看了两年前自己的博客&#xff0c;真的好青涩&#xff0c;连 markdown 都不太会用。 确实观赏感不是很好。 学习真的是慢慢积累的过程&#xff0c;以前感觉理解很困难的事&#xff0c;随着知识的增长&#xff0c;现在都基本悟了。 problem POJ3709 so…

Keiichi Tsuchiya the Drift King

Keiichi Tsuchiya the Drift King 题意&#xff1a; 给定一辆小车长宽分别为 b&#xff0c;a&#xff0c;轨道的圆弧部分半径为 r&#xff0c;圆弧对应的角度为 d&#xff0c;求出小车能通过轨道的最小轨道宽度 w。 题解&#xff1a; 我们考虑小车处于什么状态会使弯道最宽…

AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控

概述Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。该项目有非常活跃的社区和开发人员&#xff0c;目前是独立的开源项目&#xff0c;现在最常见的Kubernetes容器管理系统中&#xff0c;通常也会搭配Prometheus进行监控。prome…

模板:pb_ds指南

科技改变生活 前言 本来一直被畏于巨长的声明&#xff0c;没有学这个东西… 直到 棘手的操作 这道题&#xff0c;pb_ds模拟实现的两个log的做法不仅好写的一批&#xff0c;连时间竟然也把我单log的左偏树爆踩了&#xff1f;&#xff1f;&#xff1f; … 我选择打不过就加入… …

【学习笔记】多重背包相关优化——二进制优化/单调队列优化

多重背包——二进制优化/单调队列优化二进制优化单调队列优化代码都是 POJ1742 的&#xff0c;注意&#xff0c;那道题二进制优化会超时。 普通的多重背包式子&#xff0c;物品个数限制&#xff1a;c[i]c[i]c[i]&#xff0c;单个物品价值 w[i]w[i]w[i]&#xff0c;每个物品的体…

Game of Swapping Numbers

Game of Swapping Numbers 题意&#xff1a; A&#xff0c;B两个数组&#xff0c;让你对A进行k次操作&#xff0c;每次操作为选两个位置的数&#xff0c;进行交换&#xff0c;求最大化的Σ|Ai-Bi| 题解&#xff1a; 以前有做过最小化的情况&#xff0c;就是把每次交换作定量…

软件工程真的是一门什么用都没有的学科么?

软件工程真的是一门什么用都没有的学科么&#xff1f;-----读《构建之法》有感楔子我很惭愧&#xff0c;构建之法这本书已经出版四五年了&#xff0c;我之前却未曾涉猎&#xff0c;还是在通过组织长沙.net技术社区之后&#xff0c;才因为因缘际遇有幸认识邹欣邹老师之后&#x…

Ball Dropping

Ball Dropping 题意&#xff1a; 求&#xff1f;的具体长度 题解&#xff1a; 算一算就出来了 代码&#xff1a; #include<bits/stdc.h> using namespace std; int main(){double r,a,b,h;cin>>r>>a>>b>>h;if(2*r<b&&2*r<…

[WF2011] MachineWorks(李超树优化dp)

[WF2011]MachineWorksproblem BZOJ3963 solution 来得比较快的是&#xff0c;直接设 dpi,j:dp_{i,j}:dpi,j​: 考虑第 jjj 天换购 iii 机器。 但是马上注意到天数是 1e91e91e9 级别的&#xff0c;而机器是 1e51e51e5 级别。 稍微想想&#xff0c;就能知道&#xff0c;因为…

P3644 [APIO2015]八邻旁之桥(中位数、堆)

前言 卡了很长时间的一个题。 一开始 k1 的关键性质把握就跑偏了&#xff0c;后面基本在硬做… 关键就是一直把每个人当成一条线段作为整体在看&#xff0c;使问题很复杂… 最后用 three-pointers 磕磕绊绊搞出来了。 但是根本不用&#xff01; 解析 这题关键就在于&#xf…

尝试:Script Lab,开发模式之知识储备//SL02

前期00&#xff1a;深度&#xff1a;从 Office 365 新图标来看微软背后的设计新理念前期01&#xff1a;尝试&#xff1a;Script Lab&#xff0c;快速 Office 365 开发工具 //SL01本期02&#xff1a;尝试&#xff1a;Script Lab&#xff0c;开发模式之知识储备 //SL02项目特点适…

【学习笔记】Miller-Rabin(米勒-拉宾)素性测试,附常用表

TOC 素性测试是检验一个给定的整数是否为素数的测试。 最简单的就是用 n\sqrt{n}n​ 以内的数去试除。这是确定性的算法&#xff0c;即能准确知道 nnn 是否为质数。 但今天学习的是一种随机算法。 Fermat 小定理 如果 ppp 是一个质数&#xff0c;且 a%p≠0a\%p≠0a%p​0…

Hash Function

Hash Function 文章目录题意&#xff1a;题解&#xff1a;代码NTT代码FFT代码题意&#xff1a; 给定n个互不相同的数&#xff0c;找一个最小的模域&#xff0c;使得它们在这个模域下互不相同。n<5e5 题解&#xff1a; 考虑两个数a和b&#xff0c;a与b模m余数相同&#xf…

P5321 [BJOI2019]送别(LCT)

Foreword\text{Foreword}Foreword 肝了一下午一晚上的码农题… &#xff08;主要就是在 debug&#xff0c;LCT 太难 de 了…&#xff09; 感谢 M_sea&#xff0c;在调无可调认为LCT会不会不可做时&#xff0c;我看到了他的题解&#xff0c;几乎一样的思路&#xff0c;给了我继…

WebApi网关之Bumblebee和Ocelot性能对比

Bumblebee是基于.net core 2.1开发的WebApi网关组件&#xff0c;由于Bumblebee所追求的轻量化和性能&#xff0c;所以它并没有像Ocelot那样从asp.net core上进行扩展&#xff1b;而是构建在BeetleX.FastHttpApi之上&#xff0c;主要原因BeetleX.FastHttpApi有着更轻量化和高性能…

【无码专区11】异或2(结论 / 推式子 + 哈希hash + 大整数高精度 加减乘除重载考察)

本题已自我实现。但仍归于无码专区 problem 求 ∑i1n−1i⨁(n−i)\sum_{i1}^{n-1}i\bigoplus (n-i)∑i1n−1​i⨁(n−i)。 20%,n≤1e6;;50%,n≤1e9;;70%,n≤1e18;;100%,n≤1050020\%,n\le 1e6;;50\%,n\le 1e9;;70\%,n\le 1e18;;100\%,n\le 10^{500}20%,n≤1e6;;50%,n≤1e9;;7…

模板:常系数齐次线性递推(线性代数、多项式)

所谓常系数齐次线性递推&#xff0c;就是系数为常数的齐次线性递推。 &#xff08;逃&#xff09; 前言 sto Asta orz&#xff01; 又是一个名字高大上&#xff0c;实则小清新的算法&#xff01; 解析 考虑一个 k 次的线性递推&#xff1a; an∑i1kfian−ia_n\sum_{i1}^kf_…

2021牛客暑期多校训练营1

2021牛客暑期多校训练营1 题号题目知识点难度AAlice and Bob博弈论BBall Dropping计算几何签到CCut the TreeDDetermine the Photo Position签到EEscape along Water PipeFFind 3-friendly Integers真签到GGame of Swapping Numbers思维题&#xff0c;推导HHash FunctionFFT&a…

【无码专区12】子集和(背包dp)

此题已自我实现&#xff0c;但仍归于无码专区 本题在考场上就过了&#xff0c;所以难度并不高&#xff0c;发现性质即可。 problem 有 nnn 个正整数 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​&#xff0c;他们的和为 mmm。你想对于其每一个子集 SSS&#xff0c;求出他…

Penguins

Penguins 题意&#xff1a; 有两个20*20的地图&#xff0c;有障碍物&#xff0c;两个地图各有一个小人&#xff0c;左侧地图的小人要从右下角走到右上角&#xff0c;右侧地图的小人要从左下角走到左上角&#xff0c;这两个小人是镜像移动的&#xff0c; 左侧小人右侧小人左移…