提到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. servlet中的forward()和redirect()

    从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器 浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏 ...

  2. 网络下载器 Internet Download Manager v6.35.5 绿色便携版

    Internet Download Manager,简称 IDM,是国外的一款优秀网络下载工具.目前凭借着下载计算的速度优势在外媒网站中均受好评,现在已被多数国人熟知.Internet Downloa ...

  3. css3——box-sizing属性

    很多朋友们可能会疑惑,不知道box-sizing属性是有什么作用,自己也很少会用到,但是想必不少人在做网页布局的时候经常遇到一个问题就是我明明设置了父元素设置了假如是宽高500px,5个子元素左浮动设 ...

  4. UVA - 1160 X-Plosives

    A secret service developed a new kind of explosive that attain its volatile property only when a spe ...

  5. HDU - 1512  Monkey King

    Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each ...

  6. java23种设计模式(一)工厂方法模式

    在说工厂方法模式之前,先了解一下简单工厂模式.工厂方法模式其实是在简单工厂上面做了一些增强. 简单工厂模式:有一个专门的类来生产其他类的实例,生产的这些实例有一个共同父类.这个跟我们的多态有一点像. ...

  7. 阿里云学生服务器+WordPress搭建个人博客

    搭建过程: 第一步:首先你需要一台阿里云服务器ECS,如果你是学生,可以享受学生价9.5元/月 (阿里云翼计划:https://promotion.aliyun.com/ntms/act/campus ...

  8. Ubuntu安装NASM和简单的使用教程

    1. 安装 sudo apt-get install nasm 这样nasm就安装好了,终端输入命令: nasm -version 输出版本信息就说明安装成功 2. 使用 创建"hello. ...

  9. Web安全之注入点构造

    在测试过程中,经常需要自己本地构造注入点来进行SQL测试,这边分享一下,不同环境下构造SQL注入的代码. PHP+MYSQL版 <?php $con = mysql_connect(" ...

  10. mysql 堆注入写shell

    如果一个平台有注入点的时候可以通过写一句话拿shell 条件 1.myql 5.6.34 版本区分 2.有写的权限 3.知道绝对路径 MySQL 中 在在mysql 5.6.34版本以后 secure ...