一个二维偏序的问题,学过了三维偏序cdq分治之后觉得这个题非常的水。只需按一维排序之后再用树状数组操作即可。——by VANE

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=5e5+;
  4. struct qry
  5. {
  6. int x,y,id;
  7. }q[N<<];
  8. struct tree
  9. {
  10. int x,y;
  11. }t[N];
  12. int s[N*],n,m,tmp[N*],num,vis_tim,ans[N*];
  13. bool cmp(qry a,qry b)
  14. {
  15. return a.x<b.x;
  16. }
  17. bool cmpp(tree a,tree b)
  18. {
  19. return a.x<b.x;
  20. }
  21. void add(int x)
  22. {
  23. for(;x<=num;x+=x&-x)
  24. s[x]++;
  25. }
  26. int query(int x)
  27. {
  28. int res=;
  29. for(;x;x-=x&-x)
  30. res+=s[x];
  31. return res;
  32. }
  33. int main()
  34. {
  35. scanf("%d%d",&n,&m);
  36. for(int i=;i<=n;++i)
  37. scanf("%d%d",&t[i].x,&t[i].y);
  38. for(int i=;i<=m;++i)
  39. {
  40. int x,y,xx,yy;scanf("%d%d%d%d",&x,&y,&xx,&yy);
  41. int pos=(i-)*;
  42. q[pos+].x=xx;q[pos+].y=yy;q[pos+].id=pos+;
  43. q[pos+].x=x-;q[pos+].y=y-;q[pos+].id=pos+;
  44. q[pos+].x=xx;q[pos+].y=y-;q[pos+].id=pos+;
  45. q[pos+].x=x-;q[pos+].y=yy;q[pos+].id=pos+;
  46. }
  47. for(int i=;i<=n;++i)
  48. tmp[i]=t[i].y;
  49. for(int i=;i<=m*;++i)
  50. tmp[i+n]=q[i].y;
  51. sort(tmp+,tmp++n+m*);
  52. num=unique(tmp+,tmp++n+*m)-tmp-;
  53. for(int i=;i<=n;++i) t[i].y=lower_bound(tmp+,tmp++num,t[i].y)-tmp;
  54. for(int i=;i<=m*;++i) q[i].y=lower_bound(tmp+,tmp++num,q[i].y)-tmp;
  55. sort(q+,q++*m,cmp);
  56. sort(t+,t++n,cmpp);
  57. int i=,j=;
  58. while(j<=*m)
  59. {
  60. int h=q[j].x;
  61. while(t[i].x<=h&&i<=n) add(t[i].y),++i;
  62. while(j<=*m&&q[j].x==h)
  63. {
  64. ans[q[j].id]+=query(q[j].y);
  65. ++j;
  66. }
  67. }
  68. for(int i=;i<=*m;i+=)
  69. printf("%d\n",ans[i]+ans[i+]-ans[i+]-ans[i+]);
  70. }

二维偏序用cdq我是不是有病,我就是要写cdq 15000ms卡过去了

By:大奕哥

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int x,y,w,id,f;
  6. bool operator <(const node &b)const
  7. {
  8. return x==b.x?y<b.y:x<b.x;
  9. }
  10. }q[];
  11. int cnt,maxr,tim;
  12. int t[],v[],ans[],pos[];
  13. inline int lowbit(int x){return x&(-x);}
  14. void add(int x,int w)
  15. {
  16. for(;x<=maxr;x+=lowbit(x))
  17. {
  18. if(v[x]!=tim)
  19. {
  20. v[x]=tim;t[x]=w;
  21. }
  22. else t[x]+=w;
  23. }
  24. }
  25. int query(int x)
  26. {
  27. int an=;
  28. for(;x;x-=lowbit(x))
  29. if(v[x]==tim)
  30. an+=t[x];
  31. return an;
  32. }
  33. void cdq(int l,int r)
  34. {
  35. if(l==r)return;
  36. int mid=(l+r)>>;
  37. cdq(l,mid);cdq(mid+,r);
  38. sort(q+l,q+mid+);sort(q+mid+,q+r+);
  39. tim++;
  40. int i=l,j=mid+;
  41. while(j<=r)
  42. {
  43. while(q[i].f==&&i<=mid)++i;
  44. while(q[j].f==&&j<=r)++j;
  45. if(q[i].x<=q[j].x&&i<=mid)add(q[i].y,q[i].w),++i;
  46. else if(j<=r)ans[q[j].id]+=query(q[j].y),++j;
  47. }
  48. }
  49. int main()
  50. {
  51. int n,m;
  52. scanf("%d%d",&n,&m);
  53. for(int i=;i<=n;++i)
  54. {
  55. int x,y;
  56. scanf("%d%d",&x,&y);x++;y++;
  57. q[++cnt].f=;q[cnt].x=x;q[cnt].y=y;q[cnt].w=;q[cnt].id=cnt;maxr=max(maxr,y);
  58. }
  59. for(int i=;i<=m;++i)
  60. {
  61. int x1,x2,y1,y2;
  62. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);x1++;x2++;y1++;y2++;
  63. pos[i]=cnt;maxr=max(maxr,max(y1,y2));
  64. q[++cnt].f=;q[cnt].x=x2;q[cnt].y=y2;q[cnt].id=cnt;
  65. q[++cnt].f=;q[cnt].x=x1-;q[cnt].y=y1-;q[cnt].id=cnt;
  66. q[++cnt].f=;q[cnt].x=x1-;q[cnt].y=y2;q[cnt].id=cnt;
  67. q[++cnt].f=;q[cnt].x=x2;q[cnt].y=y1-;q[cnt].id=cnt;
  68. }
  69. cdq(,cnt);
  70. for(int i=;i<=m;++i)
  71. printf("%d\n",ans[pos[i]+]+ans[pos[i]+]-ans[pos[i]+]-ans[pos[i]+]);
  72. return ;
  73. }

BZOJ1935 园丁的烦恼的更多相关文章

  1. [bzoj1935][Shoi2007]Tree 园丁的烦恼 _树状数组

    Tree 园丁的烦恼 bzoj-1935 Shoi-2007 题目大意:给定平面上的$n$个点,$m$次查询矩形点个数. 注释:$1\le n,m\le 5\cdot 10^5$. 想法:静态二维数点 ...

  2. bzoj1935 [Shoi2007]园丁的烦恼

    bzoj1935 [Shoi2007]园丁的烦恼 有N个点坐标为(xi,yi),M次询问,询问(a,b)-(c,d)的矩形内有多少点. 0≤n≤500000,1≤m≤500000,0≤xi,yi≤10 ...

  3. [bzoj1935][shoi2007]Tree 园丁的烦恼(树状数组+离线)

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 980  Solved: 450[Submit][ ...

  4. BZOJ1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 552  Solved: 220[Submit][ ...

  5. bzoj千题计划143:bzoj1935: [Shoi2007]Tree 园丁的烦恼

    http://www.lydsy.com/JudgeOnline/problem.php?id=1935 二维偏序问题 排序x,离散化树状数组维护y #include<cstdio> #i ...

  6. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼 +CDQ分治

    1935: [Shoi2007]Tree 园丁的烦恼 参考与学习:https://www.cnblogs.com/mlystdcall/p/6219421.html 题意 在一个二维平面中有n颗树,有 ...

  7. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼( 差分 + 离散化 + 树状数组 )

    假如矩阵范围小一点就可以直接用二维树状数组维护. 这道题,  差分答案, 然后一维排序, 另一维离散化然后树状数组维护就OK了. ----------------------------------- ...

  8. 1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 648  Solved: 273[Submit][ ...

  9. bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 1261  Solved: 578[Submit] ...

随机推荐

  1. 那些让 Web 开发者们深感意外的事情

    作为 Web 开发者,对自己的行业前景,人人都有自己的看法,然而,任何行业都有出人意料的地方.著名的 Web 开发设计博客 Nope.com 曾向他们的读者做了一个调查,请他们列举 Web 开发领域那 ...

  2. bzoj 1072 状压DP

    我们用w[i][j]来表示,i是一个二进制表示我们选取了s中的某些位,j表示这些位%d为j,w[i][j]则表示这样情况下的方案数,那么我们可以得到转移.w[i|(1<<k)][(j*10 ...

  3. 【IDEA】IDEA中配置tomcat虚拟路径的两种方法

    首先要确保使用的是本地的tomcat服务器,而不是maven插件. -------------------------第一种:使用IDEA工具自动配置(推荐这种)------------------- ...

  4. perl6 一个猜测密码的注入

    use HTTP::UserAgent; my $ua = HTTP::UserAgent.new; my $r = HTTP::Request.new; my $c = HTTP::Cookies. ...

  5. scandir函数的研究【笔记】

    以下是本人的学习笔记,代码并非原创,均摘自官方源码,贴出来仅供学习记录用 scandir 的使用要注意内存泄漏的问题 scandir函数实现: vi ./uClibc-0.9.33.2/libc/mi ...

  6. Netty并发优化之ExecutionHandler

    上文<Netty框架入门>说到:如果业务处理handler耗时长,将严重影响可支持的并发数. 针对这一问题,经过学习,发现了可以使用ExecutionHandler来优化. 先来回顾一下没 ...

  7. mac 卸载 node并重新安装

    系统升级到 Sierra 之后,npm 经常出问题,最终把 node 卸载了,安装了新版本.mac 卸载 node 比较麻烦,stackoverflow 上面找到一个方法还不错,特地记录下来,代码如下 ...

  8. webapi调用post时自动匹配参数

    [HttpPost] public async Task<string> Post() { dynamic model = await Request.Content.ReadAsAsyn ...

  9. 【PAT】1011. A+B和C (15)

    1011. A+B和C (15) 给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测 ...

  10. QT编译发布程序后报错如缺少dll、“应用程序无法正常启动(0xc000007b)”的可能解决方法

    QT编译发布程序后报错如缺少dll.“应用程序无法正常启动(0xc000007b)”的可能解决方法 最近项目要用qt,因为初学没有经验,遇到些小问题常常没什么头绪,也查不到解决方法,刚刚还因为低端错误 ...