[BOI2007]摩基亚
题目:洛谷P4390、BZOJ1176。
题目大意:
给你一个\(W\times W\)的矩阵,初始每个数都为\(S\)。现在有若干操作:
1. 给某个格子加上一个值;
2. 询问某个子矩阵的值的和;
3. 结束询问
解题思路:
CDQ分治。
离线操作,把询问拆成4个矩阵(二维前缀和)。
对\(x\)轴排序,分治询问,用左区间的修改来更新右区间的询问。由于\(x\)已被排序,我们直接用树状数组维护\(y\)的前缀和即可。
也可以边CDQ边归并排序。
时间复杂度\(O(n\log^2 n)\)。
C++ Code:
#include<cstdio>
#include<algorithm>
#include<cctype>
#define LoveLive long long
#define M 2000005
int S,W,cnt=0;
LoveLive bit[M];
inline int readint(){
int c=getchar(),d=0,f=0;
for(;!isdigit(c);c=getchar())f=c=='-';
for(;isdigit(c);c=getchar())
d=(d<<3)+(d<<1)+(c^'0');
return f?-d:d;
}
struct Qs{
int type,x,y,id;LoveLive num;//type 0: modify; type 1: query.
inline bool operator<(const Qs&rhs)const{return id<rhs.id;}
}q[200020],t[200020];
inline void add(int x,LoveLive y){for(int i=x;i<M;i+=i&-i)bit[i]+=y;}
inline LoveLive ask(int x){LoveLive ans=0;for(int i=x;i;i-=i&-i)ans+=bit[i];return ans;}
inline void clear(int x){for(int i=x;i<M;i+=i&-i)bit[i]=0;}
void cdq(int l,int r){
if(l<r){
int mid=l+r>>1;
cdq(l,mid),cdq(mid+1,r);
int a=l,b=mid+1,c=l;
while(a<=mid&&b<=r){
if(q[a].x<=q[b].x){
if(!q[a].type)add(q[a].y,q[a].num);
t[c++]=q[a++];
}else{
if(q[b].type)q[b].num+=ask(q[b].y);
t[c++]=q[b++];
}
}
while(a<=mid){
if(!q[a].type)add(q[a].y,q[a].num);
t[c++]=q[a++];
}
while(b<=r){
if(q[b].type)q[b].num+=ask(q[b].y);
t[c++]=q[b++];
}
for(int i=l;i<=mid;++i)if(!q[i].type)clear(q[i].y);
for(int i=l;i<=r;++i)q[i]=t[i];
}
}
int main(){
S=readint(),W=readint();
for(int opt=readint();opt^3;opt=readint()){
if(opt==1){
int x=readint(),y=readint(),p=readint();
++cnt;
q[cnt]=(Qs){0,x,y,cnt,p};
}else{
int x1=readint(),y1=readint(),x2=readint(),y2=readint();
++cnt;q[cnt]=(Qs){1,x1-1,y1-1,cnt,0};
++cnt;q[cnt]=(Qs){1,x1-1,y2,cnt,0};
++cnt;q[cnt]=(Qs){1,x2,y1-1,cnt,0};
++cnt;q[cnt]=(Qs){1,x2,y2,cnt,0};
}
}
cdq(1,cnt);
std::sort(q+1,q+cnt+1);
for(int i=1;i<=cnt;++i)
if(q[i].type){
printf("%d\n",int(q[i+3].num-q[i+2].num-q[i+1].num+q[i].num+1ll*S*(q[i+3].y-q[i].y)*(q[i+3].x-q[i].x)));i+=3;
}
return 0;
}
[BOI2007]摩基亚的更多相关文章
- COGS1752. [BOI2007]摩基亚Mokia
1752. [BOI2007]摩基亚Mokia ★★☆ 输入文件:mokia.in 输出文件:mokia.out 简单对比时间限制:5 s 内存限制:128 MB [题目描述] 摩尔瓦 ...
- COJS 1752. [BOI2007]摩基亚Mokia
1752. [BOI2007]摩基亚Mokia ★★★ 输入文件:mokia.in 输出文件:mokia.out 简单对比时间限制:5 s 内存限制:128 MB [题目描述] 摩尔瓦 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
- 分治(CDQ):[BOI2007]摩基亚Mokia
[题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...
- COGS1752. [BOI2007]摩基亚Mokia(CDQ,树状数组)
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- Bzoj1176:Mokia&Cogs1752:[BOI2007]摩基亚Mokia
题目 Cogs 没有Bzoj的权限号 Sol 离线,\(CDQ\)分治,把询问拆成\(4\)个,变成每次求二位前缀和 那么只要一个修改操作(关键字为时间,\(x\),\(y\))都在这个询问前,就可以 ...
- 【COGS1752】 BOI2007—摩基亚Mokia
http://cogs.pro/cogs/problem/problem.php?pid=1752 (题目链接) 题意 给出$n*n$的棋盘,单点修改,矩阵查询. Solution 离线以后CDQ分治 ...
- COGS1752. [BOI2007]摩基亚Mokia CDQ
CDQ的板子题 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...
- [COGS 1752] 摩基亚Mokia
照例先上题面 1752. [BOI2007]摩基亚Mokia 输入文件:mokia.in 输出文件:mokia.out 时间限制:1.5 s 内存限制:128 MB [题目描述] 摩尔瓦多的移 ...
随机推荐
- Linux目录结构组成
linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp --- 用户所有服务 httpd ...
- 2018 MAC下安装Redis和Redis可视化工具RDM并连接Redis
实验环境:一台mac V:10.13.6 一.安装redis brew install redis 二.安装RDM 直接下载安装rdm dmg文件 链接: https://pan.baidu.com/ ...
- ACdream 1229 Data Transmission
Data Transmission Special JudgeTime Limit: 12000/6000MS (Java/Others)Memory Limit: 128000/64000KB (J ...
- html 页面刷新
JS 脚本 方法1 setInterval 函数 定时局部刷新用到jQuery里面的setInterval方法, 该函数每隔一段时间请求一次数据,然后将请求结果返回给前端HTML实现刷新. setIn ...
- [SharePoint][SharePoint2013循序渐进]SPS2013简介
本章概要: 1.啥是SPS2013 2.SharePoint如何作用于团队协作和信息共享 3.SP2013有哪些用户权限 4.什么是SharePoint2013 online 5.SP在内部署和在线订 ...
- HDU 2521
了解反素数的定义: 反素数是指[1,n]内,比n小的数的约数个数都比n的约数个数要少.注意n其实是最后一个.而在区间内,[a,b]是明显无法满足条件的. 注意了最大才5000.所以,不妨使用枚举. # ...
- js代码从页面移植到文件里失效或js代码改动后不起作用的解决的方法
近期在做关于站点的项目,总是发生这种问题 写的javascript代码在页面上没有问题,可是将js代码移植到.js的文件里,在页面上进行调用,总是出现失效等错误 另外改动后的js代码,又一次刷新网页仍 ...
- HTML5 Canvas 获取网页的像素值。
我之前在网上看过一个插件叫做出JScolor 颜色拾取器 说白了就是通过1*1PX的DOM设置颜色值通过JS来获取当前鼠标点击位置DOM的颜色值. 自从HTML5 画布出来之后.就有更好的方法来 ...
- Create a Visual C++ Wizard for Visual Studio 2005
from:http://www.codeguru.com/cpp/v-s/devstudio_macros/customappwizards/article.php/c12775/Create-a-V ...
- tcpdump dns流量监控
tcpdump监听数据 为了看清楚DNS通信的过程,下面我们将从主机1:192.168.0.141上运行host命令以查询主机www.jd.com对应的IP地址,并使用tcpdump抓取这一过程中LA ...