题目大意: 维护一个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. Windows环境下安装redis及PHP Redis扩展

    附带管理工具安装教程 安装环境 WNMP环境 参考教程:WIN10下WNMP开发环境部署 安装windows的redis服务 安装包下载 选择msi安装包下载并安装,下载可能会有点慢,请自行使用梯子. ...

  2. Trie(字典树,前缀树)_模板

    Trie Trie,又经常叫前缀树,字典树等等. Trie,又称前缀树或字典树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的 ...

  3. JavaSE库存管理系统项目实战

    需求分析 企业库房用于存放成品.半成品.原材料.工具等物资,一般情况下,这些物资统称为物料.库存管理常见业务包括物资的入库.出库.盘点.退货.报废以及财务核算等,业务逻辑比较复杂,库房信息系统项目开发 ...

  4. 初识python 字符串 列表 字典相关操作

    python基础(一): 运算符: 算术运算: 除了基本的+ - * / 以外,还需要知道 :  // 为取整除 返回的市商的整数部分 例如: 9 // 2  ---> 4  , 9.0 //  ...

  5. Go搭建一个Web服务器

    package main import ( "fmt" "net/http" "strings" "log" ) fun ...

  6. 文件 I/O字节流

    输入字节流: import java.io.*; public class test_main { public static void main(String[] args) { int n=-1; ...

  7. Python3爬虫(二)网络爬虫的尺寸与约束

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.网络爬虫的尺寸: 1.小规模,数据量小,爬取速度不敏感,Requests库,爬取网页 2.中规模,数据规模较大 ...

  8. C#窗口抖动

    用过QQ的窗口抖动功能吧.是不是觉得很神奇?很有意思?其实,仔细想想,使用的原理还是挺简单的:让窗口的位置不断快速地发生变化. 说出了原理,是不是一下恍然大悟?顿时理解了.我以前也想过如何实现这个功能 ...

  9. Returning Values from Bash Functions

    转自:https://www.linuxjournal.com/content/return-values-bash-functions Bash functions, unlike function ...

  10. 【连载】Maven系列(四)——配置私服

    相关文章 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 3.<Maven系列(三) 进阶> 一.为什么需要私服 有些公司并不提 ...