陌上花开(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要美 ...
随机推荐
- 51nod 1283 最小周长
一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值.例如:S = 24,那么有{1 24} {2 12} {3 8} {4 6}这4种矩形,其中{4 6}的周长最小,为 ...
- ubuntu 14.04 安装mysql,并配置远程连接和中文乱码
1. 安装MySQL的jar root@computer-PowerEdge-T30:~# sudo apt-get install mysql-server mysql-client在本次安装中,根 ...
- OpenCascade: 获取边的端点
FirstV = TopExp::FirstVertex(aEdge1); LastV = TopExp::LastVertex(aEdge1);
- haproxy文件的增删改查
在构建一个程序项目之前,首先需要设计程序的框架,从总体上构建一个项目中的一个个功能,之后对每一个功能进行补充,最终实现总体的功能. 1 程序的总体框架: 首先把所有的功能设计成相应的函数,用pass来 ...
- Mac如何让调整窗口大小更简单
在使用Mac的时候,你能把鼠标的光标悬停在任何程序的边缘,当光标自动变成箭头样式后,按住鼠标左键你将能随意拖动来改变程序窗口的大小.但是,这里有个问题,我们有时候很难控制把鼠标光标移动在正确的窗口边缘 ...
- Codeforces Round #275(Div. 2)-C. Diverse Permutation
http://codeforces.com/contest/483/problem/C C. Diverse Permutation time limit per test 1 second memo ...
- js采用正则表达式获取地址栏参数
getQueryString:function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*) ...
- ios之UIButoon
第一.UIButton的定义 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能够定义的button类型有以下6种, typede ...
- Luogu P2664 树上游戏 dfs+树上统计
题目: P2664 树上游戏 分析: 本来是练习点分治的时候看到了这道题.无意中发现题解中有一种方法可以O(N)解决这道题,就去膜拜了一下. 这个方法是,假如对于某一种颜色,将所有这种颜色的点全部删去 ...
- Java--容器/集合类(Collection)理解和使用
.数组和集合的比较 数组:长度固定,用来存放基本类型的数据 集合:长度不固定,用来存放对象的引用 二.集合类的基本概念 1.java.util包中提供了一些集合类,这些集合类也被称为容器. 常用的集合 ...