P3810 -三维偏序(陌上花开)cdq-分治
思路 :按照 1维排序 二维 分治三维树状数组维护
#include<bits/stdc++.h>
using namespace std;
#define maxn 234567
int n,k,id,s,tree[maxn*2],tong[maxn];
struct node
{
int a,b,c,ans,w;
node()
{
ans=0;
w=0;
}
} data[maxn];
bool cp1(node x,node y)
{
if(x.a!=y.a)
return x.a<y.a;
if(x.b!=y.b)
return x.b<y.b;
if(x.c!=y.c)
return x.c<y.c;
}
bool cp(node x,node y)
{
return x.b<y.b;
}
void add(int po,int ad)
{
while(po<=k)
{
tree[po]+=ad;
po+=po&-po;
}
}
int query(int po)
{
int ret=0;
while(po)
{
ret+=tree[po];
po-=po&-po;
}
return ret;
}
void cdq(int l,int r)
{
if(l>=r)return ;
int mid=(l+r)>>1;
cdq(l,mid);
cdq(mid+1,r);
sort(data+l,data+1+mid,cp);
sort(data+1+mid,data+1+r,cp);
int i=l,j=mid+1;
for(; j<=r; j++)
{
while(data[i].b<=data[j].b&&i<=mid)
{
add(data[i].c,data[i].w);
i++;
}
data[j].ans+=query(data[j].c);
}
for(j=l; j<i; j++)
add(data[j].c,-data[j].w);
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1; i<=n; i++)
scanf("%d%d%d",&data[i].a,&data[i].b,&data[i].c);
sort(data+1,data+1+n,cp1);
for(int i=1; i<=n; i++)
{
s++;
if(data[i].a!=data[i+1].a||data[i].b!=data[i+1].b||data[i].c!=data[i+1].c)
data[++id]=data[i],data[id].w=s,s=0;
}
cdq(1,id);
for(int i=1; i<=id; i++)
tong[data[i].ans+data[i].w-1]+=data[i].w;
for(int i=0; i<n; i++)printf("%d\n",tong[i]);
return 0;
}
P3810 -三维偏序(陌上花开)cdq-分治的更多相关文章
- BZOJ3262: 陌上花开(三维偏序,CDQ分治)
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...
- HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)
Jam's problem again Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu5618 (三维偏序,cdq分治)
给定空间中的n个点,问每个点有多少个点小于等于自己. 先来分析简单的二维的情况,那么只要将x坐标排序,那么这样的问题就可以划分为两个子问题,,这样的分治有一个特点,即前一个子问题的解决是独立的,而后一 ...
- 【算法学习】【洛谷】cdq分治 & P3810 三维偏序
cdq是何许人也?请参看这篇:https://wenku.baidu.com/view/3b913556fd0a79563d1e7245.html. 在这篇论文中,cdq提出了对修改/询问型问题(Mo ...
- P3810 陌上花开 CDQ分治
陌上花开 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3810 题意: \[ 有n 个元素,第 i 个元素有 a_i. b_i. c_i 三个属性 ...
- 洛谷P3810 陌上花开 CDQ分治(三维偏序)
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...
- [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...
- luogu P3810 三维偏序(陌上花开)cdq分治
题目链接 思路 对一维排序后,使用$cdq$分治,以类似归并排序的方法处理的二维,对于满足$a[i].b \leq a[j].b$的点对,用树状数组维护$a[i].c$的数量.当遇到$a[i].b&g ...
- BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
随机推荐
- PHP中json_encode()使用须知,JSON数组和JSON对象
⊰ 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ⊱ 如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c',' ...
- exec与match方法的区别
http://www.cnblogs.com/xiehuiqi220/archive/2008/11/05/1327487.html var someText= "web2.0 .net2. ...
- hdu4009最小树形图板子题
/*调了一下午的最小树形图,昨天刚刚看懂模板..最小树形图,就是有向图的最小生成树,很神奇==*/ #include<iostream> #include<cstring> # ...
- swagger2访问url
swagger : http://localhost:8080/swagger/index.html springboot中的swagger:http://localhost:8080/swagger ...
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...
- AI-视图组件-五个接口的最终简化版
五个接口最终版 #url.py # 序列化最贱版本 url(r'^customer/$', views.CustomerView.as_view({"get":"list ...
- Red Language
官网地址:http://www.red-lang.org/ 源代码地址:https://github.com/red/red 通过github上的Readme,可以完成Hello World的学习 ...
- Java charAt() 方法
charAt() 方法用于返回指定索引处的字符.索引范围为从 0 到 length() - 1. 参数 index -- 字符的索引. 返回值 返回指定索引处的字符. 实例 public class ...
- Tensorflow生成唐诗和歌词(上)
整个工程使用的是Windows版pyCharm和tensorflow. 源码地址:https://github.com/Irvinglove/tensorflow_poems/tree/master ...
- windows解压.tar00文件
通常是单个文件太大分拆出来的,例如data.tar00, data.tar01, data.tar02等 cmd命令行进入几个tar0x文件所在目录,执行: copy /b data.tar0* da ...