这个题大部分人用了离散然后水之,然而.....作为一只蒟蒻我并没有想到离散,而是直接拿两个区间一个对应n,一个对应k来搞,当然这两个区间是对应的,我把第一维排序,第二维CDQ,第三维树状数组,然而由于我们二分第二维的时候他的区间[1,k]和数列区间[1,n]并不重合所以我们在二分第一个区间时对应二分第二个区间,注意我们二分地一个区间的时候由于相等的也会造成影响所以我把它搞了一个重复处理和二分的时候把中间的数抠出来,因为中间的数的确把第一维比他小且第二维比他小的数的比他小的第三维都搞完了,注意二分的时候的几个边界

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100000
#define K 200000
using namespace std;
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int Ans[N+];
int C[K+];
int n,k;
inline void update(int pos,int x)
{
while(pos<=k)
{
C[pos]+=x;
pos+=pos&(-pos);
}
}
inline int get_sum(int pos)
{
int sum=;
while(pos>)
{
sum+=C[pos];
pos-=pos&(-pos);
}
return sum;
}
struct TT
{
int a,b,c,id;
}A[N+],temp[N+];
int comp(const TT a,const TT b)
{
return a.a<b.a||(a.a==b.a&&a.b<b.b)||(a.a==b.a&&a.b==b.b&&a.c<b.c);
}
void CDQ(int z,int y,int l,int r)
{
if(l==r)return;
if(z>y)return;
int mid=(z+y)>>;
for(int i=l,to=;i<=r;i+=to)
{
if(A[i].b<=mid)
{
int j=;
while(A[i+j].a==A[i].a&&A[i+j].b==A[i].b&&i+j<=r)
update(A[i+j].c,),j++;
to=j;
}
if(A[i].b>=mid)
{
int j=;
while(A[i+j].a==A[i].a&&A[i+j].b==A[i].b&&i+j<=r)
Ans[A[i+j].id]+=A[i].b==mid?get_sum(A[i+j].c)-:get_sum(A[i+j].c),j++;
to=j;
}
}
for(int i=l;i<=r;i++)
if(A[i].b<=mid)
update(A[i].c,-);
int l1=l,l2=;
for(int i=l;i<=r;i++)
if(A[i].b<mid)
temp[l1++]=A[i];
l2=l1;
for(int i=l;i<=r;i++)
if(A[i].b>mid)
temp[l2++]=A[i];
for(int i=l;i<=r;i++)
A[i]=temp[i];
if(l1!=l)CDQ(z,mid-,l,l1-);
if(l1!=l2)CDQ(mid+,y,l1,l2-);
}
inline void Init()
{
n=read(),k=read();
for(int i=;i<=n;i++)
{
A[i].a=read();
A[i].b=read();
A[i].c=read();
A[i].id=i;
}
sort(A+,A+n+,comp);
}
int Get[N+];
inline void work()
{
CDQ(,k,,n);
for(int i=;i<=n;i++)
Get[Ans[i]]++;
for(int i=;i<=n-;i++)
printf("%d\n",Get[i]);
}
int main()
{
Init();
work();
}

BZOJ 3262: 陌上花开 CDQ的更多相关文章

  1. bzoj 3262 陌上花开 - CDQ分治 - 树状数组

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  2. BZOJ 3262 陌上花开 CDQ分治

    = =原来复杂度还是nlog^2(n) Orz 被喷了 #include<cstdio> #include<cstdlib> #include<algorithm> ...

  3. BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  4. BZOJ 3262: 陌上花开 (cdq分治,三维偏序)

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...

  5. BZOJ 3262 陌上花开 ——CDQ分治

    [题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种 ...

  6. Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治

    Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...

  7. BZOJ.3262.陌上花开([模板]CDQ分治 三维偏序)

    题目链接 BZOJ3262 洛谷P3810 /* 5904kb 872ms 对于相邻x,y,z相同的元素要进行去重,并记录次数算入贡献(它们之间产生的答案是一样的,但不去重会..) */ #inclu ...

  8. bzoj 3262 陌上花开 【CDQ分治】

    三维偏序 首先把所有花按 x一序,y二序,z三序 排序,然后去重,con记录同样的花的个数,然后进行cdq 现在假设有[l.r]区间,其中[l,mid] [mid+1,r],已经递归处理完毕.我们把区 ...

  9. BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 三维偏序裸题 首先,把三元组关于$a_{i}$排序 然后开始$CDQ$分治,回溯后按$b_{i}$排序 现在要处理左侧对右侧的影响了,显然现在左侧三元组的$a_{i}$都小于等 ...

随机推荐

  1. html5 获取和设置data-*属性值的四种方法讲解

    1.获取id的对象 2.需要获取的就是data-id 和 dtat-vice-id的值 一:getAttribute()方法 const getId = document.getElementById ...

  2. Windows 10 登录界面的背景图片地址

    C:\Users\******\appdata\Local\Packages\Microsoft.Windows.ContentDeliveryManager_********\LocalState\ ...

  3. pads怎么高亮网络

    pads怎么高亮网络 选择完整个网络----再按CTRL+H 就高亮了. 取消高亮是,选择需要取消高亮的整个网络,按 CTRL+U 就取消了. PADS在生成Gerber时过孔盖油设置方法 PADS2 ...

  4. 11 非阻塞套接字与IO多路复用(进阶)

    1.非阻塞套接字 第一部分 基本IO模型 1.普通套接字实现的服务端的缺陷 一次只能服务一个客户端! 2.普通套接字实现的服务端的瓶颈!!! accept阻塞! 在没有新的套接字来之前,不能处理已经建 ...

  5. C# 生成机器码

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. (译)JavaScript 中的正则表达式(RegEx)实操——快速掌握正则表达式,伴有随手可练的例子————(翻译未完待续)

    (原文:https://blog.bitsrc.io/a-beginners-guide-to-regular-expressions-regex-in-javascript-9c58feb27eb4 ...

  7. 【Java】关于Spring框架的总结 (二)

    上文提到了 Spring 的 IoC 特性和 AOP 特性,只提到个别的实现方法.本文将对 IoC 和 AOP 其他方法进行讲解. 多种方式实现依赖注入 1.设值注入 上文中使用的注入方法:通过 se ...

  8. LeetCode:18. 4Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/4sum/description/ 2. 题目要求 给出整数数组S[n],在数组S中是否存在a,b,c,d四个整数,使得四个 ...

  9. 「日常训练」 神、上帝以及老天爷 (HDU 2048)

    题意 数论中的错排问题.记错排为Dn" role="presentation">DnDn,求Dnn!" role="presentation&q ...

  10. 初识Django —Python API接口编程入门

    初识Django —Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言, ...