P4390 [BOI2007]Mokia 摩基亚
对于一个询问 $(xa,ya),(xb,yb)$,拆成 $4$ 个询问并容斥一下
具体就是把询问变成求小于等于 $xb,yb$ 的点数,减去小于等于 $xa-1,yb$ 和小于等于 $xb,ya-1$ 的点数,再加上小于等于 $xa-1,ya-1$ 的点数
就变成求二维前缀和的问题了
然后再加上时间维,发现其实就是对每个询问,求时间更早的,横纵坐标都小于询问点的点的数量
变成裸的三维偏序问题了, $CDQ$ 分治就行
注意 $long\ long$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+,M=2e6+;
struct dat{
int x,y,id,v;
}d[N],tmp[N];
int W,tot,m;
ll ans[N],t[M];
inline void add(int x,int v) { while(x<=W) t[x]+=v,x+=x&-x; }
inline ll ask(int x) { ll res=; while(x) res+=t[x],x-=x&-x; return res; }
inline bool fc(dat a,dat b) { if(a.x!=b.x) return a.x<b.x; return a.y!=b.y ? a.y<b.y : a.id<b.id; }
void CDQ(int l,int r)
{
if(l==r) return; int mid=l+r>>;
CDQ(l,mid); CDQ(mid+,r);
int i=l,j=mid+,p=l-;
while(i<=mid&&j<=r)
{
if(fc(d[i],d[j]))
{
if(!d[i].id) add(d[i].y,d[i].v);
tmp[++p]=d[i++];
continue;
}
if(d[j].id) ans[d[j].id]+=d[j].v*ask(d[j].y);
tmp[++p]=d[j++];
}
while(i<=mid) { if(!d[i].id) add(d[i].y,d[i].v); tmp[++p]=d[i++]; }
while(j<=r) { if(d[j].id) ans[d[j].id]+=d[j].v*ask(d[j].y); tmp[++p]=d[j++]; }
for(int k=l;k<=mid;k++) if(!d[k].id) add(d[k].y,-d[k].v);
for(int k=l;k<=r;k++) d[k]=tmp[k];
}
int main()
{
int opt,xa,xb,ya,yb;
opt=read(),W=read();
while()
{
opt=read();
if(opt==) d[++tot].x=read(),d[tot].y=read(),d[tot].v=read();
if(opt==)
{
m++;
xa=read()-,ya=read()-,xb=read(),yb=read();
d[++tot]=(dat){xa,ya,m,};
d[++tot]=(dat){xa,yb,m,-};
d[++tot]=(dat){xb,ya,m,-};
d[++tot]=(dat){xb,yb,m,};
}
if(opt==) break;
}
CDQ(,tot);
for(int i=;i<=m;i++) printf("%lld\n",ans[i]);
return ;
}
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 摩基亚
题目大意: 维护一个W*W的矩阵,每次操作可以增加某格子的权值,或询问某子矩阵的总权值. 题解:CDQ分治,把询问拆成四个小矩形 卡点:无 C++ Code: #include <cstdio& ...
- 【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\) ...
随机推荐
- tomcat日志切割脚本shell
tomcat-rotate.sh: #!/bin/bash log_path="/home/tomcat7-api/logs/"expried_time=7 function de ...
- Linux架构之Nginx 配置文件
第42章 nginx相关配置文件 1.Nginx主配置文件 路径 类型 作用 /etc/nginx/nginx.conf 配置文件 nginx主配置文件 /etc/nginx/conf.d/def ...
- VPS 安装MySQL
目前Centos下默认支持的数据库是MariaDB,MariaDB是mysql的增强版本,由于mysql被Oracle收购之后,mysql之父担心之后mysql会变成闭源的软件,就又开发了这个版本,支 ...
- windows 2003 系统管理员debug
- 【LeetCode】未分类(tag里面没有)(共题)
[334]Increasing Triplet Subsequence (2019年2月14日,google tag)(greedy) 给了一个数组 nums,判断是否有三个数字组成子序列,使得子序列 ...
- ssm框架整合抽取BaseDao接口
import java.io.Serializable; import java.util.List; /** * DAO基础操作模板 * * @param <T> 泛型 */ publi ...
- 【HDOJ6687】Rikka with Stable Marriage(Trie树,贪心)
题意:给定两个长均为n的序列a和b,要求两两配对,a[i]和b[j]配对的值为a[i]^b[j],求配对后的值之和的最大值 n<=1e5,a[i],b[i]<=1e9 思路:和字典序最大的 ...
- CF889 E Mod Mod Mod——DP
题目:http://codeforces.com/contest/889/problem/E 这题真好玩. 官方题解说得很好. 想到相邻 a[ i ] 之间的段可能可以一起维护,但是不太会. 原来是表 ...
- [CSP-S模拟测试]:Silhouette(数学)
题目描述 有一个$n\times n$的网格,在每个格子上堆叠了一些边长为$1$的立方体. 现在给出这个三维几何体的正视图和左视图,求有多少种与之符合的堆叠立方体的方案.两种方案被认为是不同的,当且仅 ...
- spring+JdbcTemplate简单使用(一)
目录 @ 1. 环境配置 maven(项目管理) idea(编译器) jdk1.8(Java环境) MySQL5.6(MySQL数据库) 2. 创建项目 在 idea 中创建普通的 maven 项目 ...