题目链接:hdu_5618_Jam's problem again

题意:

给你n个点,每个点有一个坐标(x,y,z),找出有ans个点,3个坐标都比该点小,这个点的level就为ans,然后让你输出所有点的ans.

题解:

对于第一维,直接排序,后面两维的处理可以用线段树套lowbit,但空间用的很大,这里满足运用cdq分治的条件,所有用cdq分治套lowbit,常数很小。

注意相同点的处理。

  1. #include<bits/stdc++.h>
  2. #define F(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4.  
  5. const int N=1e5+;
  6. int t,n,sum[N];
  7.  
  8. struct node
  9. {
  10. int x,y,z,cnt,id;
  11. bool operator < (const node &b)const
  12. {
  13. if(x==b.x&&y==b.y)return z<b.z;
  14. if(x==b.x)return y<b.y;
  15. return x<b.x;
  16. }
  17. bool operator == (const node &b)const{return x==b.x&&y==b.y&&z==b.z;}
  18. }a[N],b[N];
  19.  
  20. bool cmp(node a,node b){return a.id<b.id;}
  21.  
  22. inline void add(int x,int c){while(x<N)sum[x]+=c,x+=x&-x;}
  23. inline int ask(int x){int an=;while(x)an+=sum[x],x-=x&-x;return an;}
  24.  
  25. void solve(int l,int r)
  26. {
  27. if(l==r)return;
  28. int mid=l+r>>;
  29. solve(l,mid),solve(mid+,r);
  30. for(int i=l,j=l,k=mid+;i<=r;i++)
  31. {
  32. if((a[j].y<=a[k].y||r<k)&&j<=mid)b[i]=a[j++],add(b[i].z,);
  33. else b[i]=a[k++],b[i].cnt+=ask(b[i].z);
  34. }//当左半边的y大于当前右半边的y时,先将这个点更新了,这样就保证了前面的y都是比这个点小
  35. F(i,l,mid)add(a[i].z,-),a[i]=b[i];
  36. F(i,mid+,r)a[i]=b[i];
  37. }
  38.  
  39. int main()
  40. {
  41. scanf("%d",&t);
  42. while(t--)
  43. {
  44. scanf("%d",&n);
  45. F(i,,n)
  46. {
  47. scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
  48. a[i].id=i,a[i].cnt=;
  49. }
  50. sort(a+,a++n);
  51. for(int i=n-;i>;i--)if(a[i]==a[i+])a[i].cnt=a[i+].cnt+;
  52. solve(,n);
  53. sort(a+,a++n,cmp);
  54. F(i,,n)printf("%d\n",a[i].cnt);
  55. }
  56. return ;
  57. }

hdu_5618_Jam's problem again(cdq分治+lowbit)的更多相关文章

  1. HDU5618 Jam's problem again CDQ分治

    Jam's problem again CDQ分治 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意: \[ 有n 个元素,第 i 个元素有 ...

  2. HDU 5618 Jam's problem again CDQ分治 BC ROUND 70

    题意:给你1e5个点(x,y,z),对于每一个点询问有多少个点(x1,y1,z1)满足x1<=x&&y1<=y&&z1<=z 分析:(官方题解奉上)很 ...

  3. HDU 5618 Jam's problem again (cdq分治+BIT 或 树状数组套Treap)

    题意:给n个点,求每一个点的满足 x y z 都小于等于它的其他点的个数. 析:三维的,第一维直接排序就好按下标来,第二维按值来,第三维用数状数组维即可. 代码如下: cdq 分治: #pragma ...

  4. [BZOJ2225][SPOJ2371]LIS2 - Another Longest Increasing Subsequence Problem:CDQ分治+树状数组+DP

    分析 这回试了一下三级标题,不知道效果怎么样? 回到正题,二维最长上升子序列......嗯,我会树套树. 考虑\(CDQ\)分治,算法流程: 先递归进入左子区间. 将左,右子区间按\(x\)排序. 归 ...

  5. SPOJ LIS2 - Another Longest Increasing Subsequence Problem(CDQ分治优化DP)

    题目链接  LIS2 经典的三维偏序问题. 考虑$cdq$分治. 不过这题的顺序应该是 $cdq(l, mid)$ $solve(l, r)$ $cdq(mid+1, r)$ 因为有个$DP$. #i ...

  6. SPOJ LIS2 Another Longest Increasing Subsequence Problem 三维偏序最长链 CDQ分治

    Another Longest Increasing Subsequence Problem Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://a ...

  7. cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )

    hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...

  8. HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)

    Jam's problem again Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  9. bzoj3295: [Cqoi2011]动态逆序对(cdq分治)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

随机推荐

  1. trove 开发者阅读翻译

    介绍 Trove为OpenStack提供数据库的服务.它的设计运行完全符合OpenStack,目标是让用户能快速.轻松地利用关系数据库的特点,没有负担的处理复杂的管理任务.云用户和数据库管理员可以根据 ...

  2. shrio登录验证

    shiro的认证过程也就是判断用户名和密码的过程,在认证过程中,用户需要提交实体信息(用户名)(Principals)和凭据信息(密码)(Credentials)来判断用户是否合法,最常见的" ...

  3. java静态方法之线程安全问题

    静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自己的程序计数器PC,在任何时刻 ...

  4. 移动平台下的Socket几个问题

    在页游时代,使用Flash ActionScript 3.0进行开发,as3提供比较简单和健全的socket API.到了手游时代,基于tcp的socket编程遇到了一些棘手的问题.通常情况下手游都要 ...

  5. Chapter 2 Open Book——36

    "That was awful," he groaned. "They all looked exactly the same. You're lucky you had ...

  6. nodejs 中es5 模块的几种写法

    1. module.exports.func = function(){}  module.exports.field = ''; 第一种是逐个对api 和字段导出. 2. module.export ...

  7. 安卓用canvas画曲线图

    1.新建一个常变量类Constant.java package com.rain.db; import android.graphics.Point; public class Constant { ...

  8. 用yum源安装Nginx

    1.在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vi nginx.repo 填写如下内容: [nginx] name= ...

  9. java实现的简单词法分析器

    一个简单的词法分析器 词法分析(Lexical Analysis) 是编译的第一阶段.词法分析器的主要任务是读入源程序的输入字符.将他们组成词素,生成并输出一个词法单元序列,每个词法单元对应一个词素. ...

  10. MAMP、wordpress安装

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 12.0px Helvetica } p.p4 { margin: ...