Time Limit: 30 Sec  Memory Limit: 162 MB
Submit: 2000  Solved: 890

Description

维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000.

Input

第一行两个整数,S,W;其中S为矩阵初始值;W为矩阵大小

接下来每行为一下三种输入之一(不包含引号):

"1 x y a"

"2 x1 y1 x2 y2"

"3"

输入1:你需要把(x,y)(第x行第y列)的格子权值增加a

输入2:你需要求出以左下角为(x1,y1),右上角为(x2,y2)的矩阵内所有格子的权值和,并输出

输入3:表示输入结束

Output

对于每个输入2,输出一行,即输入2的答案

Sample Input

0 4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

Sample Output

3
5

HINT

保证答案不会超过int范围

Source

CDQ分治

 #include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
const int mxn=;
inline int read(){
int sum=,flag=;char ch=getchar();
while(ch!='-'&&(ch>''||ch<''))ch=getchar();
if(ch=='-'){flag=-;ch=getchar();}
while(ch<=''&&ch>=''){sum=sum*+ch-'';ch=getchar();}
return sum*flag;
}
int n;
int t[mxn];
struct opt{
int flag,ti;int x,y,a;int id;
}a[mxn];
int cnt=,ict=;
LL ans[mxn];
int cmp(opt a,opt b){
return (a.x<b.x || (a.x==b.x && a.ti<b.ti));
}
inline void add(int x,int v){
while(x<=n){t[x]+=v;x+=x&-x;}
}
inline int ask(int x){
int res=;
while(x){res+=t[x];x-=x&-x;}
return res;
}
opt p[mxn];
void solve(int l,int r){
if(l>=r)return;
int mid=(l+r)>>;
int l1=l,l2=mid+;
for(int i=l;i<=r;i++){
if(a[i].flag== && a[i].ti<=mid)add(a[i].y,a[i].a);
else if(a[i].flag== && a[i].ti>mid) ans[a[i].id]+=ask(a[i].y)*a[i].a;
}
for(int i=l;i<=r;i++)if(a[i].flag== && a[i].ti<=mid)add(a[i].y,-a[i].a);
for(int i=l;i<=r;i++){
if(a[i].ti<=mid) p[l1++]=a[i];
else p[l2++]=a[i];
}
for(int i=l;i<=r;i++)a[i]=p[i];
solve(l,mid);solve(mid+,r);
return;
}
int main(){
int i,j,S;
S=read();n=read();
int op,X1,Y1,X2,Y2,w;
while(){
op=read();
if(op==)break;
if(op==){
X1=read();Y1=read();w=read();
a[++cnt].x=X1;a[cnt].y=Y1;a[cnt].a=w;a[cnt].flag=;a[cnt].ti=cnt;
}
else{
X1=read()-;Y1=read()-;X2=read();Y2=read();
a[++cnt].x=X1;a[cnt].y=Y1;a[cnt].a=;a[cnt].flag=;a[cnt].ti=cnt;a[cnt].id=++ict;
a[++cnt].x=X1;a[cnt].y=Y2;a[cnt].a=-;a[cnt].flag=;a[cnt].ti=cnt;a[cnt].id=ict;
a[++cnt].x=X2;a[cnt].y=Y1;a[cnt].a=-;a[cnt].flag=;a[cnt].ti=cnt;a[cnt].id=ict;
a[++cnt].x=X2;a[cnt].y=Y2;a[cnt].a=;a[cnt].flag=;a[cnt].ti=cnt;a[cnt].id=ict;
ans[ict]=(X2-X1)*(Y2-Y1)*S;
}
}
sort(a+,a+cnt+,cmp);
solve(,cnt);
for(i=;i<=ict;i++){
printf("%lld\n",ans[i]);
}
return ;
}

Bzoj1176 [Balkan2007]Mokia的更多相关文章

  1. [BZOJ1176][Balkan2007]Mokia cdq+树状数组

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1395[Submit][S ...

  2. BZOJ1176: [Balkan2007]Mokia CDQ分治

    最近很不对啊=w= 写程序全是bug啊 ans数组开小了竟然一直不知道,小数据没问题大数据拍不过,交上去RE 蛋疼半天 这个主要把每次询问拆成3个询问. #include<cstdio> ...

  3. bzoj1176: [Balkan2007]Mokia【cdq分治】

    把询问搞成4个,cdq分治. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a;i <= b; i++) #d ...

  4. 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)

    传送门 调了半天发现是输出优化打错了求心理阴影体积233 这题很简单啊. 一个修改操作x如果对一个询问操作y有贡献那么有. tx<ty,Xx<=Xy,Yx<=Yy" rol ...

  5. bzoj千题计划144:bzoj1176: [Balkan2007]Mokia

    http://www.lydsy.com/JudgeOnline/problem.php?id=1176 CDQ分治 #include<cstdio> #include<iostre ...

  6. 【kd-tree】bzoj1176 [Balkan2007]Mokia

    裸题不多说,注意在sqrt(n*log(n))次插入后重构树以保持深度. #include<cstdio> #include<cmath> #include<algori ...

  7. BZOJ1176 [Balkan2007]Mokia 【CDQ分治】

    题目 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. 输入格式 ...

  8. bzoj2683(要改一点代码)&&bzoj1176: [Balkan2007]Mokia

    仍然是一道cdq模版.. 那么对于一个询问,容斥一下分成四个,变成问(1,1)~(x,y),那么对于x,y,修改只有x'<=x&&y'<=y,才对询问有影响,那么加上读入顺 ...

  9. cdq分治入门--BZOJ1176: [Balkan2007]Mokia

    对w*w,w<=2000000的矩形,一开始全是0(或一开始全是s),n<=170000个操作,每次操作:矩阵内某点加上一个数,查某一个子矩阵的和,保证修改数<=160000,询问数 ...

随机推荐

  1. Hadoop学习2

    搭建伪分布式完成之后: 伪分布式安装详细介绍:http://www.powerxing.com/install-hadoop/ 练习1 编写Java程序实现以下函数: 1.向HDFS中上传文件 2.从 ...

  2. IT人经济思维之投资 - 创业与投资系列文章

    前面笔者写过一个文(IT从业者的职业规划),主要通过笔者的从业道路的经验,介绍了IT从业者的职业选择道路问题,主要从技术.业务和管理三大方面进行了描述.然后,通过文(IT从业者的职业道路(从程序员到部 ...

  3. 版本管理工具SVN

    此文件根据慕课网 源生活老师的教学视频总结 视频地址 http://www.imooc.com/learn/109 一.SVN下载和安装配置 服务端下载地址 https://www.visualsvn ...

  4. Windows on Device 项目实践 3 - 火焰报警器制作

    在前两篇<Windows on Device 项目实践 1 - PWM调光灯制作>和<Windows on Device 项目实践 2 - 感光灯制作>中,我们学习了如何利用I ...

  5. CentOS 6.6安装Xtrabackup RPM提示缺少libev.so.4()

    在CentOS Release 6.6安装percona-xtrabackup-2.3.4时,遇到下面错误信息 rpm -ivh percona-xtrabackup-2.3.4-1.el6.x86_ ...

  6. jQuery 中的 39 个技巧

    1.当document文档就绪时执行JavaScript代码. 我们为什么使用jQuery库呢?原因之一就在于我们可以使jQuery代码在各种不同的浏览器和存在bug的浏览器上完美运行. <sc ...

  7. (转)Div和Table的区别

    原文:http://www.cnblogs.com/lovebear/archive/2012/04/18/2456081.html Div与table的区别 1:速度和加载方式方面的区别 div 和 ...

  8. Tomcat中更改网站根目录

    Tomcat的默认目录是指向webapps下的root目录,输入http://localhost:8080,会打开root目录下的页面.我想让localhost指向我自己的目录.比如webapps/m ...

  9. [很郁闷]python2.7连接mysql5.5配置

    前言:今天在公司电脑上python版本跟自己家里电脑上的一样,不一样的是mysql公司版本5.6,结果花了两天的时间都没配置好python和mysql 简单说就是python连接mysql一直报200 ...

  10. Android APP 两种用程序拨号的方式

    想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在 ...