BZOJ 3262: 陌上花开 (cdq分治,三维偏序)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
const int maxn=1e5+10;
const int maxk=2e5+10;
int n,k;
struct Triple {
int a,b,c,cnt,ans;
}a[maxn],A[maxn];
bool cmp(const Triple &a,const Triple &b) {
if (a.a!=b.a) {
return a.a<b.a;
}
else if (a.b!=b.b) {
return a.b<b.b;
}
return a.c<b.c;
}
struct BitIndexTree {
int a[maxk];
int lowbit(const int x) {
return x&(-x);
}
void Update(const int x,const int delta) {
for (int i=x;i<=k;i+=lowbit(i)) {
a[i]+=delta;
}
}
void Clean(const int x) {
for (int i=x;i<=k;i+=lowbit(i)) {
if (a[i]) {
a[i]=0;
}
else {
break;
}
}
}
int Query(const int x) {
int ans=0;
for (int i=x;i>0;i-=lowbit(i)) {
ans+=a[i];
}
return ans;
}
}bit;
void CDQ(Triple *l,Triple *r)
{
if (l==r) {
l->ans+=l->cnt-1;
return ;
}
Triple *mid=l+(r-l)/2;
CDQ(l,mid);
CDQ(mid+1,r);
static Triple tmp[maxn];
for (Triple *p=tmp,*p1=l,*p2=mid+1;p<=tmp+(r-l);p++) {
if ((p1<=mid&&p1->b<=p2->b)||p2>r) {
*p=*p1++;
bit.Update(p->c,p->cnt);
}
else {
*p=*p2++;
p->ans+=bit.Query(p->c);
}
}
for (Triple *p=tmp,*q=l;q<=r;p++,q++) {
bit.Clean(p->c);
*q=*p;
}
}
template <typename T>
inline void read(T &x)
{
int f=1;
x=0;
register char ch;
ch=getchar();
while (ch>'9'||ch<'0') {
if (ch=='-') {
f=-f;
}
ch=getchar();
}
while (ch>='0'&&ch<='9') {
x=x*10+ch-'0';
ch=getchar();
}
x*=f;
}
inline void write(int x)
{
if (x<0) {
putchar('-');
}
if (x>9) {
write(x/10);
}
putchar(x%10+'0');
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=0;i<n;i++) {
read(a[i].a),read(a[i].b),read(a[i].c);
// scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c);
a[i].cnt=1;
}
sort(a,a+n,cmp);
int cnt=0;
for (int i=0;i<n;i++) {
if (i==0||!(a[i].a==a[i-1].a&&a[i].b==a[i-1].b&&a[i].c==a[i-1].c)) {
A[cnt++]=a[i];
}
else {
A[cnt-1].cnt+=1;
}
}
CDQ(A,A+cnt-1);
static int ans[maxn];
for (int i=0;i<cnt;i++) {
ans[A[i].ans]+=A[i].cnt;
}
for (int i=0;i<n;i++) {
write(ans[i]);
putchar('\n');
// printf("%d\n",ans[i]);
}
return 0;
}
BZOJ 3262: 陌上花开 (cdq分治,三维偏序)的更多相关文章
- BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- 洛谷P3810 陌上花开 CDQ分治(三维偏序)
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...
- BZOJ 3262 陌上花开 ——CDQ分治
[题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种 ...
- BZOJ 3262 陌上花开 CDQ分治
= =原来复杂度还是nlog^2(n) Orz 被喷了 #include<cstdio> #include<cstdlib> #include<algorithm> ...
- BZOJ - 1935 / 1176 cdq分治 三维偏序
题意:给定n*m的网格,且给出n个(x,y)表示该网格已被占有,q次询问(x1,y1)到(x2,y2)的网格中有多少个被占有,n,m范围1e7,q范围5e5 cdq按x轴排序,树状数组维护y轴 #in ...
- BZOJ 2244: [SDOI2011]拦截导弹 (CDQ分治 三维偏序 DP)
题意 略- 分析 就是求最长不上升子序列,坐标取一下反就是求最长不下降子序列,比较大小是二维(h,v)(h,v)(h,v)的比较.我们不看概率,先看第一问怎么求最长不降子序列.设f[i]f[i]f[i ...
- cdq分治·三维偏序问题
转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...
- 【算法】CDQ分治 -- 三维偏序 & 动态逆序对
初次接触CDQ分治,感觉真的挺厉害的.整体思路即分而治之,再用之前处理出来的答案统计之后的答案. 大概流程是(对于区间 l ~ r): 1.处理 l ~mid, mid + 1 ~ r 的答案: 2. ...
随机推荐
- HDU2020——绝对值排序(java实现,使用map)
Question Description Input Output Sample Input Sample Output 解题思路简述: 在接收每一个数组的过程中,将负数及其绝对值以键值对的形式存入m ...
- Oracle tnsnames.ora
安装过ORACLE的都知道,oracle安装时需要进行配置,这个配置可以在客户端的企业管理器一步一步进行,或者直接拷贝一个tnsnames.ora文件到安装目录下(c:\app\Administrat ...
- [POI2007] OSI-Axes of Symmetry
Description Luogu3454 BZOJ1100 Solution 把边和角顺次放入一个数组里,如果一个点为中心的回文串的半径大于\(n\),那就一定是一个对称轴.跑一遍manacher就 ...
- Centos7搭建Apache2.4
我不多说废话了,相信在座的都应该明白怎么安装Apache2.4,我这才用yum源安装的,我个人认为这样安装的话,可以节省一些时间,有的网络不是很好,要等一段时间. 配置与Apache2.2的版本有点变 ...
- webpack 打包CSS 引入图片
加载css 安装style-loader, css-loader npm install style-loader css-loader --save-dev 配置webpack.config.js文 ...
- C++-POJ1017-Packets
贪心算法,思路见代码 本来想搜索,结果有O(1)的算法,我佛了 其实每一种6x6的方案可以打表预处理,然后dp or search 但是既然可以贪心何乐而不为呢? #include <set&g ...
- PPT 素材大全
1.模板大全 2.三方辅助软件APP 3.PPT学习软件 www.presentationload.com dribble.com www.zcool.com.cn 4.其他功能
- 随笔js
js中的函数定义之后,函数名就是这个函数(JS中函数其实也是对象)的地址(句柄) js读取函数内存地址: 首先想读内存地址只有C或者C++,汇编抛开不谈,其他高级语言一般都封装起来了,不过我也不能确定 ...
- js的一些基础
事件对象: 就是用来存储事件相关的信息 事件对象存储信息有: 事件的类别,如:click,keydown等等 点击事件的位置 点击的哪一个键 等等 用于阻止事件流,用于阻止浏览器默认动作(表单提交.a ...
- 一文明白所谓的CS与BS设计模式
CS设计模式 概念:CS设计模式,C代表的是Client,S代表的是Server.正如图中的所示,是客户机与服务器之间的交互.这种交互在早期的软件系统中,大多数都是采用这种模式,通过将任务合理分配到C ...