陌上花开(bzoj 3262)
Description
Input
Output
Sample Input
3 3 3
2 3 3
2 3 1
3 1 1
3 1 2
1 3 1
1 1 2
1 2 2
1 3 2
1 2 1
Sample Output
1
3
0
1
0
1
0
0
1
HINT
1 <= N <= 100,000, 1 <= K <= 200,000
/*
这个东西好像叫三维偏序,就是排序一维,cdq一维,树状数组一维。
自己尝试码了码,但是出现了很多问题,然后看了看网上的代码,感觉还是不怎么懂
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 500010
using namespace std;
int now,n,ans[N],k;
struct node{
int c,s,m,num,ans;
};node a[N],b[N],q[N];
struct Node{
int v,T;
};Node t[N*];
bool cmp(node a,node b){
if(a.s==b.s&&a.c==b.c)return a.m<b.m;
if(a.s==b.s)return a.c<b.c;
return a.s<b.s;
}
bool cmp2(node a,node b){
if(a.c==b.c&&a.s==b.s)return a.m<b.m;
if(a.c==b.c)return a.s<b.s;
return a.c<b.c;
}
void modify(int x,int v){
while(x<=k){
if(t[x].T==now) t[x].v+=v;
else t[x].T=now,t[x].v=v;
x+=x&(-x);
}
}
int query(int x){
int sum=;
while(x){
if(t[x].T==now)sum+=t[x].v;
x-=x&(-x);
}
return sum;
}
void cdq(int l,int r){
if(l==r){
a[l].ans+=(a[l].num-);
return;
}
int m=l+r>>;
int q1=l,q2=m+;
for(int i=l;i<=r;i++)
if(q1<=m&&a[i].s<=m)
q[q1++]=a[i];
else q[q2++]=a[i];
for(int i=l;i<=r;i++)
a[i]=q[i];
cdq(l,m);
now++;
int j=l;
for(int i=m+;i<=r;i++){
for(;j<=m;j++)
if(a[i].c>=a[j].c)modify(a[j].m,a[j].num);
else break;
a[i].ans+=query(a[i].m);
}
cdq(m+,r);
q1=l;q2=m+;
for(int i=l;i<=r;i++)
if((a[q1].c<=a[q2].c||q2>r)&&q1<=m)
q[i]=a[q1++];
else q[i]=a[q2++];
for(int i=l;i<=r;i++)
a[i]=q[i];
}
int main(){
now=;
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++){
scanf("%d%d%d",&a[i].s,&a[i].c,&a[i].m);
a[i].num=;
}
sort(a+,a+n+,cmp);
int tot=;
for(int i=;i<=n;i++){
int k=(a[i].s==a[i-].s)&(a[i].c==a[i-].c)&(a [i].m==a[i-].m);
if(i==||!k)a[++tot]=a[i];
else a[tot].num++;
}
for(int i=;i<=tot;i++)a[i].s=i;
sort(a+,a+tot+,cmp2);
cdq(,tot);
for(int i=;i<=tot;i++)
ans[a[i].ans]+=a[i].num;
for(int i=;i<n;i++)
printf("%d\n",ans[i]);
return ; }
陌上花开(bzoj 3262)的更多相关文章
- 陌上花开 HYSBZ - 3262 (CDQ分治)
陌上花开 HYSBZ - 3262 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另 ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治
Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...
- 【BZOJ 3262】 3262: 陌上花开 (CDQ分治)
3262: 陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A ...
- BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)
题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #inclu ...
- BZOJ 3262 陌上花开 ——CDQ分治
[题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种 ...
- bzoj 3262 陌上花开
本质是一个三维偏序,一位排序后cdq分治,一维在子函数里排序,一维用树状数组维护. 把三维相等的合并到一个里面. #include<iostream> #include<cstdio ...
- 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要美 ...
随机推荐
- debug1: expecting SSH2_MSG_KEX_ECDH_REPLY解决
设置mtu ifconfig en1 mtu 1200 代理工具 退出lantern,退出shadowsocks
- caffe实现多label输入(修改源码版)
http://blog.csdn.net/u013010889/article/details/54614067 这个人的博客本身也相当好
- Bootstrap 网格系统(Grid System)实例3
Bootstrap 网格系统(Grid System)实例:堆叠水平 <!DOCTYPE html><html><head><meta http-equiv= ...
- pre-receive hook declined
没有master分支的代码提交权限. 分配权限或者提交分支合并申请
- vuejs 中 select 动态填充数据,后台的数据
selected:"A" 对 selected:A 错. 变量不用引号. 内容一定要引号. https://jsfiddle.net/rgnuaw30/ ...
- shell脚本,文件里面的英文大小写替换方法。
[root@localhost wyb]# cat daxiaoxie qweBNMacb eeeDFSmkl svdIOPtyu [root@localhost wyb]# cat daxiaoxi ...
- Sass 构建之 7-1模式
Sass 项目结构之7-1模式 7-1模式的结构:7个文件夹,1个文件. 基本上,你需要将所有的部件放进7个不同的文件夹和一个位于根目录的文件(通常用main.scss或者app.scss) 编译时会 ...
- centos7.2快速搭建LAMP平台
#查看linux系统版本信息 cat /etc/redhat-release 以上是操作系统的所有信息,补充下内核信息参数介绍: 3.10.0-514.26.2.el7.x86_64 3表示主版本号, ...
- Day08字符编码
Day08: 知识储备: 硬盘:由硬盘加载到内存,cpu从内存中取 软件产生的数据都是先保存在内存中 文件,输入文字,保存到内存,内存是硬件,硬件只能保存2进制,所以需要转换 文本编辑器,输入文字的时 ...
- java复习之基础环境
环境基本介绍: JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为b ...