Bzoj2683 简单题
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++变量命名规则
转自:http://www.cnblogs.com/finallyliuyu/archive/2010/09/25/1834301.html 浅谈C++变量命名规则 不知道别的公司如何,反正我现在的公 ...
- hadoop 2.6全分布安装
环境:centos 6.6 + hadoop2.6 虚拟机:(vmware fusion 7.0.0) 虚拟机hostname / IP地址 master / 192.168.187. ...
- unity3d 三分钟实现简单的赛车漂移
提到赛车游戏,大家最关心的应该就是漂移吧?! 从学unity开始,我就一直在断断续续的研究赛车 因为自己技术太烂.悟性太差等原因,我走了不少弯路 也许你会说,网上那么多资料,你不会查啊 是啊!网上一搜 ...
- (二十三)原型模式详解(clone方法源码的简单剖析)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 原型模式算是JAVA中最简单 ...
- sql server 字符串函数str()
语法: STR(nExpres[,nLength[,nDecimalPlaces]]) 参数: nExpression------STR要计算的数值表达式. nLength------------ST ...
- 将Microsoft Ajax Minifier集成到VS2013对JS、CSS进行编译时压缩
在网站发布中,一般要将js,css文件压缩减少体积,以减少在HTTP请求中的流量.将Microsoft Ajax Minifier集成到VS2013中就可以对JS.CSS进行编译时压缩. VS2013 ...
- PotPlayer为播放而生的专业播放器
韩国,比较牛逼的视频播放器.专注与本地视频播放,值得拥有.... 免费下载:http://yunpan.cn/cmZ5ELC6DTI8Y 访问密码 4bf1
- Go--避免SQL注入
避免SQL注入 什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞.可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出 ...
- JS是按值传递还是按引用传递
按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本.修改形参的值并不会影响实参. 按引用传递(call by reference)时,函数的形参接收实参的隐式 ...
- 【BZOJ 2152】聪聪可可 点分治
对于一棵树,fdrt找到重心,然后分治每个子树. 在一棵以重心为根的树上,符合条件的链是: 1.过重心(根) 2.不过重心 对于1我们只需dfs出距离重心(根)的距离然后统计再减去有重叠的边 对于2我 ...