COGS1752. [BOI2007]摩基亚Mokia CDQ
CDQ的板子题
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2000010
using namespace std;
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int Y[MAXN],W;
inline void update(int pos,int p)
{
while(pos<=W)
{
Y[pos]+=p;
pos+=pos&(-pos);
}
}
inline int get_sum(int pos)
{
int sum=;
while(pos>)
{
sum+=Y[pos];
pos-=pos&(-pos);
}
return sum;
}
struct QUERY
{
int opt,id,x,y,t;
}A[],temp[];
int sz;
int Ans[];
int comp(const QUERY a,const QUERY b)
{
return a.x<b.x||(a.x==b.x&&a.opt<b.opt);
}
void CDQ(int l,int r)
{
if(l==r)return;
int mid=(l+r)>>;
for(int i=l;i<=r;i++)
if(A[i].opt)
{
if(A[i].id>mid)
{
if(A[i].t>)
Ans[A[i].t]+=get_sum(A[i].y);
else
Ans[-A[i].t]-=get_sum(A[i].y);
}
}
else
if(A[i].id<=mid)
update(A[i].y,A[i].t);
for(int i=l;i<=r;i++)
if(A[i].opt==&&A[i].id<=mid)
update(A[i].y,-A[i].t);
int l1=l,l2=mid+;
for(int i=l;i<=r;i++)
if(A[i].id<=mid)
temp[l1++]=A[i];
else
temp[l2++]=A[i];
for(int i=l;i<=r;i++)
A[i]=temp[i];
CDQ(l,mid);
CDQ(mid+,r);
}
int T;
void Init()
{
W=read(),W=read();
while()
{
int opt=read();
if(opt==)
{
A[++sz].opt=;
A[sz].x=read();
A[sz].y=read();
A[sz].id=sz;
A[sz].t=read();
continue;
}
if(opt==)
{
T++;
int X1=read(),Y1=read(),X2=read(),Y2=read();
A[++sz].opt=;
A[sz].id=sz;
A[sz].x=X2;
A[sz].y=Y2;
A[sz].t=T;
if(X1!=)
{
A[++sz].opt=;
A[sz].id=sz;
A[sz].x=X1-;
A[sz].y=Y2;
A[sz].t=-T;
}
if(Y1!=)
{
A[++sz].opt=;
A[sz].id=sz;
A[sz].x=X2;
A[sz].y=Y1-;
A[sz].t=-T;
}
if(X1!=&&Y1!=)
{
A[++sz].opt=;
A[sz].id=sz;
A[sz].x=X1-;
A[sz].y=Y1-;
A[sz].t=T;
}
}
if(opt==)break;
}
sort(A+,A+sz+,comp);
CDQ(,sz);
}
inline void print()
{
for(int i=;i<=T;i++)
printf("%d\n",Ans[i]);
}
int main()
{
freopen("mokia.in","r",stdin);
freopen("mokia.out","w",stdout);
Init();
print();
return ;
}
COGS1752. [BOI2007]摩基亚Mokia CDQ的更多相关文章
- COGS1752. [BOI2007]摩基亚Mokia
1752. [BOI2007]摩基亚Mokia ★★☆ 输入文件:mokia.in 输出文件:mokia.out 简单对比时间限制:5 s 内存限制:128 MB [题目描述] 摩尔瓦 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
- COGS1752. [BOI2007]摩基亚Mokia(CDQ,树状数组)
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...
- COJS 1752. [BOI2007]摩基亚Mokia
1752. [BOI2007]摩基亚Mokia ★★★ 输入文件:mokia.in 输出文件:mokia.out 简单对比时间限制:5 s 内存限制:128 MB [题目描述] 摩尔瓦 ...
- 分治(CDQ):[BOI2007]摩基亚Mokia
[题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...
- 【COGS1752】 BOI2007—摩基亚Mokia
http://cogs.pro/cogs/problem/problem.php?pid=1752 (题目链接) 题意 给出$n*n$的棋盘,单点修改,矩阵查询. Solution 离线以后CDQ分治 ...
- Bzoj1176:Mokia&Cogs1752:[BOI2007]摩基亚Mokia
题目 Cogs 没有Bzoj的权限号 Sol 离线,\(CDQ\)分治,把询问拆成\(4\)个,变成每次求二位前缀和 那么只要一个修改操作(关键字为时间,\(x\),\(y\))都在这个询问前,就可以 ...
- [COGS 1752] 摩基亚Mokia
照例先上题面 1752. [BOI2007]摩基亚Mokia 输入文件:mokia.in 输出文件:mokia.out 时间限制:1.5 s 内存限制:128 MB [题目描述] 摩尔瓦多的移 ...
- [BOI2007]Mokia 摩基亚(CDQ分治)
upd:\((x1,y1)(x2,y2)\)表示以\((x1,y1)\)为左上端点 \((x2,y2)\)为右下端点的矩形 本来以为是一道二位树状数组的模板,但是看数据范围之后就放弃了,边界既然到了2 ...
随机推荐
- python学习之面向对象程序设计的一些思考
将属于一类的对象放在一起: 如果一个函数操纵一个全局变量,那么两者最好都在类内作为特性和方法实现. 不要让对象过于亲密: 方法应该只关心自己实例的特性,让其他实例管理自己的状态. 简单就好: 让方法小 ...
- Java学习笔记一:三步搭建Java开发环境
Java开发环境搭建 一:安装JDK: 1.下载地址:http://www.oracle.com/technetwork/java/javase/downloads 非常显眼的下载界面 2.点击下载后 ...
- 002---Python基本数据类型--字符串
字符串 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1p ...
- python2.7入门---文件I/O&简单用户交互
这篇文章开始之前,我们先来看下python中的输出方法.最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你传递的表达式转换成一个字符串表达式,并将结果写 ...
- c/c++ 数组传参
在c/c++中,在进行数组传参时,数组的元素个数默认是不作为实参传入调用函数,也就是说c/c++ 不允许向函数传递一个完整的数组作为参数 实例: 1.形式参数是一个指针,实参包括数组长度: 1 voi ...
- Hadoop启动后无法启动NodeManager
在配置完Hadoop集群后,使用命令:“start-all.sh”进行启动集群.然后使用命令:“jps”查看进程启动情况,发现没有NodeManager 只需要使用命令:cd /usr/local/ ...
- C#属性默认值设置
关于在MVC中view中设置默认值,可以象如下设置: 1.关于VIEWMODEL的部分 如果是C# 6.0,网上资料查到说可以 如果语法不支持,只能改回.net 2.0的写法. public cla ...
- 多个excel合并(excel2007)
1.新建一个空的excel文件,在需要合并的目录下. 2.右键点击sheet1,点击查看代码 3.执行此段代码 Sub 合并当前目录下所有工作簿的全部工作表() Dim MyPath, MyName, ...
- 每天一个Linux命令(12):su命令
su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码. 语法: su(选项)(参数) 选项: -c<指令>或--command=<指令>:执行完指定 ...
- 序列化---fastjson使用
该文章主要介绍com.alibaba.fastjson的使用. 首先创建maven工程,导入fastjson.挑个热度高的版本就好了. 首先考虑下,我们通常什么时候会使用序列化和反序列化: 1.将ja ...