Time Limit: 50 Sec Memory Limit: 128 MB
Submit: 1071 Solved: 428
Description
命令 |
参数限制 |
内容 |
1 x y A |
1<=x,y<=N,A是正整数 |
将格子x,y里的数字加上A |
2 x1 y1 x2 y2 |
1<=x1<= x2<=N 1<=y1<= y2<=N |
输出x1 y1 x2 y2这个矩形内的数字和 |
3 |
无 |
终止程序 |
Input
Output
Sample Input
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3
Sample Output
5
HINT
Source
嘛,真是简单题啊,才调了两天就过了。
K-Dtree定期重构,强行维护数据。常数写不好的话会T飞。
之前把47行的左右边界取错了,时间复杂度直接突破天际。
/*by SilverN*/ #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<vector> #define LL long long using namespace std; ; LL read(){ LL x=,f=;char ch=getchar(); ;ch=getchar();} +ch-';ch=getchar();} return x*f; } struct node{ int l,r; ],max[]; ]; int w; LL sum; }t[mxn]; ,nowD; int cmp(const node a,const node b){ return a.d[nowD]<b.d[nowD]; } int n,cnt; ; inline void pushup(int rt,int x){ t[rt].max[]=max(t[rt].max[],t[x].max[]); t[rt].max[]=max(t[rt].max[],t[x].max[]); t[rt].min[]=min(t[rt].min[],t[x].min[]); t[rt].min[]=min(t[rt].min[],t[x].min[]); return; } inline bool in(int x1,int y1,int x2,int y2,int k){ ] && t[k].max[]<=x2 && y1<=t[k].min[] && t[k].max[]<=y2); } inline bool out(int x1,int y1,int x2,int y2,int k){ ] || x2<t[k].min[] || y1>t[k].max[] || y2<t[k].min[]); } int Build(int l,int r,int D){ ; nowD=D;; nth_element(t+l,t+mid,t+r+,cmp);/// t[mid].max[]=t[mid].min[]=t[mid].d[]; t[mid].max[]=t[mid].min[]=t[mid].d[]; t[mid].sum=t[mid].w; t[mid].l=Build(l,mid-,D^); if(t[mid].l)pushup(mid,t[mid].l); t[mid].r=Build(mid+,r,D^); if(t[mid].r)pushup(mid,t[mid].r); t[mid].sum=t[mid].w+t[t[mid].l].sum+t[t[mid].r].sum; return mid; } void insert(int &now,int x,int D){ if(!now){now=x;return;} if(t[x].d[D]==t[now].d[D] && t[x].d[!D]==t[now].d[!D]){ t[now].w+=t[x].w; t[now].sum+=t[x].w; --cnt; return; } if(t[x].d[D]<t[now].d[D]){ insert(t[now].l,x,D^); pushup(now,t[now].l); } else{ insert(t[now].r,x,D^); pushup(now,t[now].r); } t[now].sum=t[now].w+t[t[now].l].sum+t[t[now].r].sum; return; } LL query(int rt,int x1,int y1,int x2,int y2){ ; LL res=; if(in(x1,y1,x2,y2,rt)){return t[rt].sum;} ;} ] && t[rt].d[]<=x2 && y1<=t[rt].d[] && t[rt].d[]<=y2) res+=t[rt].w; res+=query(t[rt].l,x1,y1,x2,y2)+query(t[rt].r,x1,y1,x2,y2); return res; } int main(){ int i,j,op,x,y,w; n=read();lim=; int X1,X2,Y1,Y2; ){ op=read(); )break; ){ t[++cnt].d[]=read();t[cnt].d[]=read(); t[cnt].w=read();t[cnt].sum=t[cnt].w; t[cnt].max[]=t[cnt].min[]=t[cnt].d[]; t[cnt].max[]=t[cnt].min[]=t[cnt].d[]; insert(root,cnt,); if(cnt==lim){ lim+=; root=Build(,cnt,); } } else{ X1=read();Y1=read();X2=read();Y2=read(); printf("%lld\n",query(root,X1,Y1,X2,Y2)); } } ; }
Bzoj2683 简单题的更多相关文章
-
[BZOJ2683]简单题/[BZOJ1176][BalkanOI2007]Mokia
[BZOJ2683]简单题 题目大意: 一个\(n\times n(n\le5\times10^5)\)的矩阵,初始时每个格子里的数全为\(0\).\(m(m\le2\times10^5)\)次操作, ...
-
bzoj2683简单题 cdq分治
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1803 Solved: 731[Submit][Status][Discuss] ...
-
bzoj2683简单题
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> ...
-
BZOJ2683: 简单题(cdq分治 树状数组)
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2142 Solved: 874[Submit][Status][Discuss] Descripti ...
-
BZOJ2683 简单题(CDQ分治)
传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...
-
Bzoj2683 简单题 [CDQ分治]
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
-
【对询问分块】【主席树】bzoj2683 简单题
对操作序列分块,每S次暴力重建主席树. 当S=sqrt(n*log(n))时,复杂度为O(m*sqrt(n*log(n))). 在线的. #include<cstdio> #include ...
-
cdq分治——bzoj2683简单题
https://www.lydsy.com/JudgeOnline/problem.php?id=2683 知识点:1.以操作的顺序进行分治 2.cdq分治维护矩阵 3.计算比mid小的给比mid大 ...
-
[BZOJ2683][BZOJ4066]简单题
[BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...
随机推荐
-
一种简单,轻量,灵活的C#对象转Json对象的方案(续)
本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...
-
XML 文件解析
1.XML文件 <Data> <Movie id="1"> <title>good lucky to you</title> < ...
-
1105. Spiral Matrix (25)
This time your job is to fill a sequence of N positive integers into a spiral matrix in non-increasi ...
-
JsRender系列demo-对null 和boolen类型数据的探讨
废话不说了,直接上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...
-
Linux下c函数dlopen实现加载动态库so文件代码举例
dlopen()是一个强大的库函数.该函数将打开一个新库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.这种机制使得在系统中添加或者删除一个模块时,都不需要重新编译了. ...
-
cocos2d-x简单动画
转自:http://4137613.blog.51cto.com/4127613/759610 这里只给出最基本的动画代码,具体使用要根据实际情况自己封装.最好自己开发一个编辑器.额外说一句,开发编辑 ...
-
Android 软键盘小知识点
chatText = (EditText) findViewById(R.id.chatText); chatText.setOnKeyListener(new OnKeyListener() { p ...
-
sql优化-提防错误关联
在写sql时,在多表关联时,有时候容易把关联关系写错.一般情况下,该问题比较容易发现,但如果sql较长时,光靠眼力就比较难发现了.今天写了一个脚本,碰到该问题了. 第一版本的脚本如下: select ...
-
运行容器的最佳实践 - 每天5分钟玩转 Docker 容器技术(24)
按用途容器大致可分为两类:服务类容器和工具类的容器. 1. 服务类容器以 daemon 的形式运行,对外提供服务.比如 web server,数据库等.通过 -d 以后台方式启动这类容器是非常合适的. ...
-
基于Dubbo的http自动测试工具分享
公司是采用微服务来做模块化的,各个模块之间采用dubbo通信.好处就不用提了,省略了之前模块间复杂的http访问.不过也遇到一些问题: PS: Github的代码示例还在整理中... 测试需要配合写消 ...