题目大意: 维护一个W*W的矩阵,每次操作可以增加某格子的权值,或询问某子矩阵的总权值。

题解:CDQ分治,把询问拆成四个小矩形

卡点:

C++ Code:

#include <cstdio>
#include <algorithm>
#define int long long
#define lb(x) (x & -x)
using namespace std;
struct node {
int op, id, x, y, num;
}q[200010], tmp[200010];
int S, W, op, num, cnt;
int T[2000010];
inline bool cmp(node a, node b) {return a.id < b.id;}
void add(int p, int num) {for (int i = p; i <= W; i += lb(i)) T[i] += num;}
int ask(int p) {int res = 0; for(int i = p; i; i -= lb(i)) res += T[i]; return res;}
void clear(int p) {for (int i = p; i <= W; i += lb(i)) T[i] = 0;}
void CDQ(int l, int r) {
if (l >= r) return ;
int mid = l + r >> 1;
CDQ(l, mid); CDQ(mid + 1, r);
int p1 = l, p2 = mid + 1, p3 = l;
while (p1 <= mid && p2 <= r) {
if (q[p1].x <= q[p2].x) {
if (!q[p1].op) add(q[p1].y, q[p1].num);
tmp[p3++] = q[p1++];
} else {
if (q[p2].op) q[p2].num += ask(q[p2].y);
tmp[p3++] = q[p2++];
}
}
while (p1 <= mid) {
if (!q[p1].op) add(q[p1].y, q[p1].num);
tmp[p3++] = q[p1++];
}
while (p2 <= r) {
if (q[p2].op) q[p2].num += ask(q[p2].y);
tmp[p3++] = q[p2++];
}
for (int i = l; i <= mid; i++) if (!q[i].op) clear(q[i].y);
for (int i = l; i <= r; i++) q[i] = tmp[i];
}
signed main() {
scanf("%lld%lld", &S, &W);
while (scanf("%lld", &op)){
if (op == 3) break;
if (op == 1){
int x, y, num;
scanf("%lld%lld%lld", &x, &y, &num);cnt++;
q[cnt] = (node){0, cnt, x, y, num};
}else {
int x1, y1, x2, y2;
scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);
cnt++; q[cnt] = (node) {1, cnt, x1 - 1, y1 - 1, 0};
cnt++; q[cnt] = (node) {1, cnt, x1 - 1, y2, 0};
cnt++; q[cnt] = (node) {1, cnt, x2, y1 - 1, 0};
cnt++; q[cnt] = (node) {1, cnt, x2, y2, 0};
}
}
CDQ(1, cnt);
sort(q + 1, q + cnt + 1, cmp);
for (int i = 1; i <= cnt; i++) if (q[i].op) {
printf("%lld\n", q[i + 3].num - q[i + 1].num - q[i + 2].num + q[i].num + S * (q[i + 3].y - q[i].y) * (q[i + 3].x - q[i].x));
i += 3;
}
return 0;
}

  

[洛谷P4390][BOI2007]Mokia 摩基亚的更多相关文章

  1. 洛谷 P4390 [BOI2007]Mokia 摩基亚 解题报告

    P4390 [BOI2007]Mokia 摩基亚 题目描述 摩尔瓦多的移动电话公司摩基亚(\(Mokia\))设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户 ...

  2. P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫米.但其真正高科 ...

  3. Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治

    题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...

  4. P4390 [BOI2007]Mokia 摩基亚(cdq分治)

    一样是cdq的板子 照着园丁的烦恼就好了 代码 #include <cstdio> #include <cstring> #include <algorithm> ...

  5. P4390 [BOI2007]Mokia 摩基亚

    传送门 对于一个询问 $(xa,ya),(xb,yb)$,拆成 $4$ 个询问并容斥一下 具体就是把询问变成求小于等于 $xb,yb$ 的点数,减去小于等于 $xa-1,yb$ 和小于等于 $xb,y ...

  6. 【BZOJ1176】[BOI2007]Mokia 摩基亚

    [BZOJ1176][BOI2007]Mokia 摩基亚 题面 bzoj 洛谷 题解 显然的\(CDQ\)\(/\)树套树题 然而根本不想写树套树,那就用\(CDQ\)吧... 考虑到点\((x1,y ...

  7. [BOI2007]Mokia 摩基亚

    Description: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫 ...

  8. cogs1752[boi2007]mokia 摩基亚 (cdq分治)

    [题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...

  9. 【cdq分治】【P4390】[BOI2007]Mokia 摩基亚

    Description 给你一个 \(W~\times~W\) 的矩阵,每个点有权值,每次进行单点修改或者求某子矩阵内权值和,允许离线 Input 第一行是两个数字 \(0\) 和矩阵大小 \(W\) ...

随机推荐

  1. 一次 group by + order by 性能优化分析

    一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...

  2. elasticsearch 5.x 系列之五 数据导入导出

    一.首先给大家发一个福利,分享一个elasticsearch 数据导出工具. esm github 源码地址: https://github.com/medcl/esm 下载编译好的对应elastic ...

  3. ruby mysql2

    1. mysql2连接选项 Mysql2::Client.new( :host, :username, :password, :port, :database, :socket = '/path/to ...

  4. PublicCMS 网站漏洞 任意文件写入并可提权服务器权限

    PublicCMS是目前网站系统中第一个采用JAVA架构 TOMCAT+Apcche+Mysql数据库架构的CMS网站,开源,数据承载量大,可以承载到上千万的数据量,以及用户的网站并发可达到上千万的P ...

  5. SQLServer 将日期改造成标准日期格式(如: 2016/6 ->201606)

    同事给了份Excel 数据,导到数据库之后再查出来时发现顺序不好弄.于是想从数据源中做处理. 由于数据存在,年/月 与 年/月/日 的格式不好用datetime保存,于是用varchar保存. 数据处 ...

  6. fastDFS 上传 java源码

    要想搭建fastDFS网上有相近的文章: 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试 首先下载fastd ...

  7. WPF中使用定时器的注意事项

    原文:WPF中使用定时器的注意事项 注意事项 要使用System.Windows.Threading.DispatcherTimer,而不能使用System.Timers.Timer. 原因是WPF是 ...

  8. 从循环里面用QPixmap new对象很耗时联想到的

    1.在循环里面用QPixmap new图片对象延迟很高,这个是通过打时间日志得出的,深层原因还不清楚: 2.自制的图片浏览器在初始化的时候会初始化自己的一个图片列表,所以要用到上面的描述.所有图片的初 ...

  9. jmeter常用的内置变量

    1. vars   API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html vars.get(& ...

  10. Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)

    作者:Antonio Leiva 时间:Mar 9, 2017 原文链接:https://antonioleiva.com/property-delegation-kotlin/ 如我们在前面文章中读 ...