bzoj 3262 陌上花开
本质是一个三维偏序,一位排序后cdq分治,一维在子函数里排序,一维用树状数组维护。
把三维相等的合并到一个里面。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
using namespace std;
int n,k,m;
struct node
{
int x,y,z,num,op;
int yuan;
bool operator == (const node &b)
{
return x==b.x&&y==b.y&&z==b.z;
}
}a[N],b[N];
int shan[N];
int ans[N];
bool cmp1(node aa,node bb)
{
if(aa.num==)return ;
if(bb.num==)return ;
if(aa.x!=bb.x)return aa.x<bb.x;
if(aa.y!=bb.y)return aa.y<bb.y;
if(aa.z!=bb.z)return aa.z<bb.z; }
bool cmp2(node aa,node bb)
{
if(aa.y!=bb.y)return aa.y<bb.y;
return aa.op<bb.op;
}
int c[];
void add(int x,int y)
{
for(int i=x;i<=k;i+=(i&(-i)))c[i]+=y;
}
int qur(int x)
{
int now=;
for(int i=x;i;i-=(i&(-i)))now+=c[i];
return now;
}
void solve(int l,int r)
{
if(l==r)return ;
int mid=(l+r)>>;
solve(l,mid);solve(mid+,r);
int cnt=;
for(int i=l;i<=mid;i++)
{
b[++cnt]=a[i];
b[cnt].op=;
}
for(int i=mid+;i<=r;i++)
{
b[++cnt]=a[i];
b[cnt].op=;
}
sort(b+,b+cnt+,cmp2);
for(int i=;i<=cnt;i++)
{
if(b[i].op==)add(b[i].z,b[i].num);
else ans[b[i].yuan]+=qur(b[i].z);
}
for(int i=;i<=cnt;i++)if(b[i].op==)add(b[i].z,-b[i].num);
}
int zui[N];
int main()
{
scanf("%d%d",&n,&k);m=n;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
a[i].num=;
}
sort(a+,a+n+,cmp1);
for(int i=;i<=n;i++)
{
if(a[i]==a[i-])
{
a[shan[i-]].num++;
shan[i]=shan[i-];
a[i].num--;
}
else shan[i]=i;
}
sort(a+,a+n+,cmp1);
while(a[n].num==)n--;
for(int i=;i<=n;i++)a[i].yuan=i;
solve(,n);
for(int i=;i<=n;i++)zui[ans[a[i].yuan]+a[i].num-]+=a[i].num;
for(int i=;i<=m-;i++)printf("%d\n",zui[i]);
return ;
}
bzoj 3262 陌上花开的更多相关文章
- Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治
Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #inclu ...
- BZOJ 3262 陌上花开 ——CDQ分治
[题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种 ...
- BZOJ 3262 陌上花开 CDQ分治
= =原来复杂度还是nlog^2(n) Orz 被喷了 #include<cstdio> #include<cstdlib> #include<algorithm> ...
- BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- 【刷题】BZOJ 3262 陌上花开
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...
- BZOJ 3262: 陌上花开 CDQ
这个题大部分人用了离散然后水之,然而.....作为一只蒟蒻我并没有想到离散,而是直接拿两个区间一个对应n,一个对应k来搞,当然这两个区间是对应的,我把第一维排序,第二维CDQ,第三维树状数组,然而由于 ...
- bzoj 3262 陌上花开 【CDQ分治】
三维偏序 首先把所有花按 x一序,y二序,z三序 排序,然后去重,con记录同样的花的个数,然后进行cdq 现在假设有[l.r]区间,其中[l,mid] [mid+1,r],已经递归处理完毕.我们把区 ...
随机推荐
- CSS3 box-sizing
请在火狐浏览器测试,其他浏览器不一定有效 <!DOCTYPE html > <html > <head> <meta charset="utf-8& ...
- Html--表单练习
<!--文档定义一定要带上,因为浏览器在解析的时候先按照文档定义的格式解析, 如果没有就按照浏览器默认的格式解析,可能会出问题.--> <html> & ...
- 杀毒软件导致YourSQLDba备份失败
有一朋友咨询我,他配置的YourSQLDba 备份作业经常出现备份失败的情况,我帮忙查看了一下,首先从告警邮件中查看出错的具体信息,执行了下面SQL语句(来自于告警邮件) Exec YourSQLDb ...
- 功能强大而又简单易学的编程语言Python
Python是一种面向对象.直译式计算机程序设计语言,也是一种功能强大的通用型语言.首先,Python非常简单,以Hello World为例: Java的Hello World程序一般这么写: pub ...
- WordPress目录文件结构详细说明
根目录 |-wp-admin | |-css | |-images | |-includes | |-js | |-maint | |-network | |-user |-wp-content | ...
- Android开发究竟用什么工具,Eclipse||AS
所谓公欲善其事必先利器,那就让我们来看一下android的开发工具吧,安卓的开发工具有Eclipse和Android Studio,另外还有IntelliJ IDEA,可能很多人并不知道. 首先看一下 ...
- QT210 android2.3 和android4.0 烧写编译日记
QT210下载烧录编译android2.3过程 工作环境:ubuntu12.04.5 | QT210开发板光盘 | QT210开发板 android2.3编译环境:gcc version 4.4.7 ...
- [转]说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
本文转自:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两 ...
- Libevent初探
Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易 ...
- mysql简单复制服务搭建
.安装mysql源(centos7中默认是不包含mysql源) wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm ...