P3810 【模板】三维偏序(陌上花开)
cdq分治+树状数组
三维偏序模板题
前两维用cdq分治,第三维用树状数组进行维护
就像用树状数组搞逆序对那样做--->存权值的出现次数
attention:当两个元素完全相同时要重复计算
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
template <typename T> inline void read(T &x){
char c=getchar(); x=; bool f=;
while(!isdigit(c)) f= !f||c=='-' ? :,c=getchar();
while(isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
x= f? x:-x;
}int wt[];
template <typename T> inline void output(T x){
if(!x) {putchar(); return ;}
if(x<) putchar('-'),x=-x; int l=;
while(x) wt[++l]=x%,x/=;
while(l) putchar(wt[l--]+);
}
struct data{
int x,y,z,ans,w;
bool operator < (const data &tmp) const{
return (x<tmp.x||(x==tmp.x&&y<tmp.y)||(x==tmp.x&&y==tmp.y&&z<tmp.z));
}
}a[],b[];
int n,k,cnt,lev[];
struct tree_array{ //树状数组
int t[];
inline void add(int x,int p) {for(;x<=k;x+=x&-x)t[x]+=p;}
inline int sum(int x) {int res=; for(;x;x-=x&-x)res+=t[x]; return res;}
}mo1;
inline void cdq(int l,int r){ //cdq分治
int mid=l+((r-l)>>);
if(l==r) return ;
cdq(l,mid); cdq(mid+,r);
int t1=l,t2=mid+;
for(int i=l;i<=r;++i){
if((t1<=mid&&a[t1].y<=a[t2].y)||t2>r) mo1.add(a[t1].z,a[t1].w),b[i]=a[t1++]; //注意可以取到等号
else a[t2].ans+=mo1.sum(a[t2].z),b[i]=a[t2++];
}
for(int i=l;i<=mid;++i) mo1.add(a[i].z,-a[i].w); //记得清空树状数组
for(int i=l;i<=r;++i) a[i]=b[i];
}
int main(){
read(n); read(k);
for(int i=;i<=n;++i) read(a[i].x),read(a[i].y),read(a[i].z),a[i].w=;
sort(a+,a+n+);
for(int i=;i<=n;++i){
if(i==||a[i-]<a[i]) a[++cnt]=a[i];
else ++a[cnt].w; //去重(当然后面要加回来)
}cdq(,cnt);
for(int i=;i<=cnt;++i) lev[a[i].ans+a[i].w]+=a[i].w; //把重复的加回来
for(int i=;i<=n;++i) output(lev[i]),putchar('\n');
return ;
}
P3810 【模板】三维偏序(陌上花开)的更多相关文章
- P3810 【模板】三维偏序(陌上花开)(CDQ分治)
题目背景 这是一道模板题 可以使用bitset,CDQ分治,K-DTree等方式解决. 题目描述 有 nn 个元素,第 ii 个元素有 a_iai.b_ibi.c_ici 三个属性,设 f(i) ...
- Luogu P3810 【模板】三维偏序(陌上花开)(CDQ分治)
题目 以三维偏序为例来讲一下CDQ分治. CDQ的本质就是把一个序列分成两段,计算左边对右边的贡献,然后分治. 不过一般都是先分治到底再从下往上算,这样可以先归并再算. 比如这道题,我们先按第一维排序 ...
- P3810 -三维偏序(陌上花开)cdq-分治
P3810 [模板]三维偏序(陌上花开) 思路 :按照 1维排序 二维 分治三维树状数组维护 #include<bits/stdc++.h> using namespace std; #d ...
- 洛谷P3810 陌上花开 CDQ分治(三维偏序)
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...
- BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...
- [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...
- Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治
Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...
- 【算法学习】【洛谷】cdq分治 & P3810 三维偏序
cdq是何许人也?请参看这篇:https://wenku.baidu.com/view/3b913556fd0a79563d1e7245.html. 在这篇论文中,cdq提出了对修改/询问型问题(Mo ...
- BZOJ3262 陌上花开 —— 三维偏序 CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit ...
随机推荐
- CodeForce 832A Sasha and Sticks
A. Sasha and Sticks time limit per test2 seconds memory limit per test256 megabytes inputstandard in ...
- 1.9TF的过拟合-dropout
不带dropout程序并通过tensorboard查看loss的图像 """ Please note, this code is only for python 3+. ...
- SecureFX 中文乱码
1. 找到SecureFX配置文件夹(选项–全局选项,常规下的配置文件夹),比如:C:\Users\James\AppData\Roaming\VanDyke\Config\Sessions 2. ...
- 2018/03/10 每日一个Linux命令 之 cksum
每日一个Linux命令 2018-03-10 Linux 命令 cksum cksum [文件] 今天楼下的一个大妈去世了,不仅感叹,现如今,真的和以前不一样了,楼上楼下都不知道住的是谁? cksu ...
- 2018/03/09 每日一个Linux命令 之 chgrp/chown
每日一个Linux命令 2018-03-09 Linux 命令 chgrp/chown chgrp [-参数] [文件或者目录] chown [-参数] [文件所有者]:[文件所属群组] [文件或者目 ...
- 如何下载Bilibili视频
方法1: https://www.bilibili.com/video/av25940642 (源网址) https://www.ibilibili.com/video/av25940642 (新网址 ...
- HandlerThread分析
Handy class for starting a new thread that has a looper. The looper can then be used to create handl ...
- javaScript高级教程(九) ------javascript对象字面量--------困扰已久的问题
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外. ...
- Loadrunner之https协议录制回放报错如何解决?(九)
一.录制中遇到报错27778的问题(如下图1),即关于录制的链接为https开头的问题,分两个步骤解决,如下: 图1 https访问报错解决步骤如下: 1.修改Vuser-->Run-time ...
- BUG笔记:Win8 IE10下input[type="password"]内字符显示被截取问题
这个BUG发生的截图: 这是发生在Windows8 IE10下,type为password的input文本框内输入长串字符后,初次失去焦点的时候会发生的一个BUG. 发生BUG的原因是这个文本框上应用 ...