[洛谷P4390][BOI2007]Mokia 摩基亚
题目大意: 维护一个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 摩基亚的更多相关文章
- 洛谷 P4390 [BOI2007]Mokia 摩基亚 解题报告
P4390 [BOI2007]Mokia 摩基亚 题目描述 摩尔瓦多的移动电话公司摩基亚(\(Mokia\))设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户 ...
- P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫米.但其真正高科 ...
- Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治
题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...
- P4390 [BOI2007]Mokia 摩基亚(cdq分治)
一样是cdq的板子 照着园丁的烦恼就好了 代码 #include <cstdio> #include <cstring> #include <algorithm> ...
- P4390 [BOI2007]Mokia 摩基亚
传送门 对于一个询问 $(xa,ya),(xb,yb)$,拆成 $4$ 个询问并容斥一下 具体就是把询问变成求小于等于 $xb,yb$ 的点数,减去小于等于 $xa-1,yb$ 和小于等于 $xb,y ...
- 【BZOJ1176】[BOI2007]Mokia 摩基亚
[BZOJ1176][BOI2007]Mokia 摩基亚 题面 bzoj 洛谷 题解 显然的\(CDQ\)\(/\)树套树题 然而根本不想写树套树,那就用\(CDQ\)吧... 考虑到点\((x1,y ...
- [BOI2007]Mokia 摩基亚
Description: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫 ...
- cogs1752[boi2007]mokia 摩基亚 (cdq分治)
[题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...
- 【cdq分治】【P4390】[BOI2007]Mokia 摩基亚
Description 给你一个 \(W~\times~W\) 的矩阵,每个点有权值,每次进行单点修改或者求某子矩阵内权值和,允许离线 Input 第一行是两个数字 \(0\) 和矩阵大小 \(W\) ...
随机推荐
- pyqt4学习资料
官方文档: http://pyqt.sourceforge.net/Docs/PyQt4/classes.html 啄木鸟社区:https://wiki.woodpecker.org.cn/moin/ ...
- 微信小程序中无刷新修改
1.点击事件无刷新修改 原理:onload事件中是把这个分类和品牌的列表全部拿出来,拼接成数组的格式,在小程序中遍历的时候就要把小标(index)给绑定到左侧的品牌上,然后js中获取index的值,就 ...
- Nodejs 使用 SerialPort 调用串口
工作经常使用串口读写数据,electron 想要替代原来的客户端,串口成了必须要突破的障碍. get --> https://github.com/EmergingTechnologyAdvi ...
- VSCode插件整理
VSCode插件整理 VSCode插件整理 官网地址 vscode常用配置(User Settings文件) 基本插件 前端插件 VUE部分 python MarkDown部分 连接Linux 本地与 ...
- 怎么用Python Flask模板jinja2在网页上打印显示16进制数?
问题:Python列表(或者字典等)数据本身是10进制,现在需要以16进制输出显示在网页上 解决: Python Flask框架中 模板jinja2的If 表达式和过滤器 假设我有一个字典index, ...
- Leecode刷题之旅-C语言/python-53.最大子序和
/* * @lc app=leetcode.cn id=53 lang=c * * [53] 最大子序和 * * https://leetcode-cn.com/problems/maximum-su ...
- 50条大牛C++编程开发学习建议
每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少.本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真 ...
- stm32+lwip(五):以太网帧发送测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- java 上溯造型与下塑造型
父类: package com.neusoft.chapter07; public class Father { public int i = 1; public void say(){ System ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...