提到cdq,就不得不提这道该死的,挨千刀的题目了。

极简题面:

给定一个二维平面,在ti时刻会在(xi,yi)放一个点,会在tj时刻查询一个方框里面的点的数量

看道题就是二维线段树乱搞啊,这么水???

数据范围劝退警告

单是一维都快有点吃不消了...1e6*1e6的数组?几个GB???

。。。

于是,伟大的CDQ分治出场了。

题面其实可以这样翻译:

按时插入点,询问小于(x,y)且时间也小于当前点的点的个数

这不就是CDQ的事吗?比模板题还要裸。。。

但是可能要差分一下(二维差分)因为统计的是点与00组成的大矩形,所以要剪去两个矩形,再加上一个小矩形,所以要统计四个点的偏序

总结一下,就是cdq。

第一维时间,第二维x,第三维y

一定要离线做

于是开始了愉快的CDQ

#include<bits/stdc++.h>
using namespace std;
const int maxn=; struct node
{
int time,x,y,val,id;
}e[maxn];
int m,cnt,t[maxn<<],a[maxn],ans[maxn];
inline int lowbit(int x)
{
return x & - x ;
}
void add(int x,int y)
{
for(;x<=m;x+=lowbit(x))
{
t[x]+=y;
}
}
int ask(int x)
{
int res=;
for(;x;x-=lowbit(x))
{
res+=t[x];
}
return res;
}
bool cmp2(node a,node b)
{
if(a.x!=b.x)return a.x<b.x;
if(a.y!=b.y)return a.y<b.y;
//else return a.time<b.time;
}
bool cmp(node a,node b)
{
return a.time<b.time;
}
void cdq(int l,int r)
{
if(l==r)return;
int mid=l+r>>;
cdq(l,mid);
cdq(mid+,r);
sort(e+l,e++r,cmp2);
for(int i=l;i<=r;i++)
{
if(e[i].x<=mid&&e[i].id==)
add(e[i].y,e[i].val);
else e[i].val+=ask(e[i].y);
}
for(int i=l;i<=r;i++)
{
if(e[i].x<=mid&&e[i].id==)
add(e[i].y,-e[i].val);
}
}
int read()
{
int f=,x=;char s=getchar();
while(s>''||s<''){if(s=='-')f=-;s=getchar();}
while(s<=''&&s>=''){x=x*+s-'';s=getchar();}
return x*f;
}
int main()
{
read();
m=read();
int flag=read();
while(flag!=)
{
if(flag==)
{
int x=read()+,y=read()+,val=read();
e[++cnt]=(node){cnt,x,y,val,};
}
else
{
int x1=read(),yl=read(),x2=read()+,y2=read()+;
e[++cnt]=(node){cnt,x1,yl,,};//数据结构体化
e[++cnt]=(node){cnt,x2,y2,,};
e[++cnt]=(node){cnt,x2,yl,,};
e[++cnt]=(node){cnt,x1,y2,,};
}
flag=read();
}
cdq(,cnt);然后硬cdq就行了
sort(e+,e+cnt+,cmp);
for(int i=;i<=cnt;++i)
{
if(e[i].id==)
{
printf("%d\n",e[i].val+e[i+].val-e[i+].val-e[i+].val);
i+=;
}
}
return ;
}

(完)

Mokia(三维偏序)P4390的更多相关文章

  1. BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 三维偏序裸题.. 每次操作都看成一个三元组$<x,y,t>$,表示$x,y$坐标和操作时间$t $ 询问操作拆成$4$个容斥 接下来就是$CDQ$了,外层按t排序, ...

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

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

  3. SPOJ LIS2 Another Longest Increasing Subsequence Problem 三维偏序最长链 CDQ分治

    Another Longest Increasing Subsequence Problem Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://a ...

  4. BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  5. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  6. BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...

  7. P3810 -三维偏序(陌上花开)cdq-分治

    P3810 [模板]三维偏序(陌上花开) 思路 :按照 1维排序 二维 分治三维树状数组维护 #include<bits/stdc++.h> using namespace std; #d ...

  8. cdq分治解决三维偏序

    问题背景 在三维坐标系中有n个点,坐标为(xi,yi,zi). 定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB,zA<=zB.问对于每个点,有多少个点比它小.(n< ...

  9. P3810 【模板】三维偏序(陌上花开)

    P3810 [模板]三维偏序(陌上花开) cdq分治+树状数组 三维偏序模板题 前两维用cdq分治,第三维用树状数组进行维护 就像用树状数组搞逆序对那样做--->存权值的出现次数 attenti ...

随机推荐

  1. GoLang 获取两个时间相差多少小时

    package main import ( "fmt" "time" ) func main() { fmt.Println(getHourDiffer(&qu ...

  2. Python3 os.path() 模块

    os 模块提供了非常丰富的方法用来处理文件和目录.常用的方法如下表所示: 序       号 方法及描述 1 os.access(path, mode):检验权限模式 2 os.chdir(path) ...

  3. python编程基础之二十一

    元组: t1 = () t2 = tuple() 成员访问: t1 =(10,7,12,23) print(t1[0])  #下表访问 连接操作 t1 = (1,2,3) t2 =(4,5,6) t3 ...

  4. 基于Spark的电影推荐系统(推荐系统~2)

    第四部分-推荐系统-数据ETL 本模块完成数据清洗,并将清洗后的数据load到Hive数据表里面去 前置准备: spark +hive vim $SPARK_HOME/conf/hive-site.x ...

  5. SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

    前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache.RedisCache.ConcurrentMapCac ...

  6. MFC日期显示

    一.使用MFC的CTime类来得到时间: CTime必须调用赋值函数,使用其静态函数来初始化 例如: CTime time=CTime::GetCurrentTime(): 这样就可以直接调用time ...

  7. Halcon一日一练:阈值分割的几个算子

    threshold(Image:Region:MinGray:MaxGray:) 功能:得到灰度值在最小与最大这间的那些部分.其返回仍然是一个区域. MinGray<MaxGray. 这个算子可 ...

  8. 关于vue使用的一些小经验

    这一年来说,vue的势头很猛,用户量“噌”“噌”“噌”的涨 为了不掉队不落伍.在后台大哥的胁迫下,不得不选择用了它 刚开始很难接受vue的写法,在编辑器里很容易报错,基本上每行都会出现红色的波浪线 这 ...

  9. Python编程系列---使用字典实现路由静态路由

    def index(): print('Index Page....') def bbs(): print('BBS Page....') def login(): print('Login Page ...

  10. shell数组(四)

    [root@ipha-dev71- exercise_shell]# cat test.sh #!/bin/bash my_array=(a b c d) echo "第一个元素为:${my ...