题目链接:Problem - 4456

看别人叙述看的心烦,于是我自己画了一张图。

上图。

上代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <cmath>
  6. using namespace std;
  7. const int maxn = ;
  8. const int maxm = 3e6+; //这里大小的确定应该是80000*log2(20000)*log2(20000),算出来大约是一千三百万,数据应该是水一些,然而看所有人的题解,都是四百万,呵呵呵,这其中一定有什么交易。
  9. int p[maxn],x[maxn],y[maxn],z[maxn];
  10. int arr[maxm];
  11. int cnt[maxm];
  12. int num = ;
  13. int len = ;
  14. int w = ;
  15. int lowbit(int x)
  16. {
  17. return x&(-x);
  18. }
  19. void pre(int x,int y)
  20. {
  21. for(int i=x;i<=w;i+=lowbit(i))
  22. {
  23. for(int j=y;j<=w;j+=lowbit(j))
  24. {
  25. cnt[num++] = i*w+j;
  26. }
  27. }
  28. }
  29. void sum(int x,int y,int tt)
  30. {
  31. for(int i=x;i<=w;i+=lowbit(i))
  32. {
  33. for(int j=y;j<=w;j+=lowbit(j))
  34. {
  35. int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
  36. arr[id] += tt;
  37. }
  38. }
  39. }
  40. int getsum(int x,int y)
  41. {
  42. x=max(x,); x=min(x,w); //边界
  43. y=max(y,); y=min(y,w);
  44. int summ = ;
  45. for(int i=x;i>;i-=lowbit(i))
  46. {
  47. for(int j=y;j>;j-=lowbit(j))
  48. {
  49. int id = lower_bound(cnt,cnt+len,i*w+j)-cnt;
  50. if(cnt[id]==(i*w+j)) summ += arr[id];
  51. }
  52. }
  53. return summ;
  54. }
  55. int main()
  56. {
  57. int n,m;
  58. while(scanf("%d",&n)!=EOF&&n)
  59. {
  60. scanf("%d",&m);
  61. w = *n;
  62. memset(cnt,,sizeof(cnt));
  63. memset(arr,,sizeof(arr));
  64. num = ;
  65. for(int i=;i<=m;i++)
  66. {
  67. scanf("%d %d %d %d",&p[i],&x[i],&y[i],&z[i]);
  68. int nx = x[i]-y[i]+n;
  69. int ny = x[i]+y[i];
  70. if(p[i]==)
  71. pre(nx,ny);
  72. }
  73. sort(cnt,cnt+num);
  74. len = unique(cnt,cnt+num)-cnt;
  75. for(int i=;i<=m;i++)
  76. {
  77. int nx = x[i]-y[i]+n;
  78. int ny = x[i]+y[i];
  79. if(p[i]==)
  80. {
  81. sum(nx,ny,z[i]);
  82. }
  83. else
  84. {
  85. int x1,y1,x2,y2,x3,y3,x4,y4;
  86. x1 = nx+z[i];y1 = ny+z[i];
  87. x2 = nx+z[i];y2 = ny-z[i];y2--;
  88. x3 = nx-z[i];y3 = ny+z[i];x3--;
  89. x4 = nx-z[i];y4 = ny-z[i];x4--;y4--;
  90. printf("%d\n",getsum(x1,y1)-getsum(x2,y2)-getsum(x3,y3)+getsum(x4,y4));
  91. }
  92. }
  93. }
  94. return ;
  95. }

HDU 4456(二维树状数组+坐标转换)的更多相关文章

  1. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  2. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

  3. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  4. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  6. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  7. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  8. HDU_4456_二维树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4456 第一道二维树状数组就这么麻烦,题目要计算的是一个菱形范围内的和,于是可以把原来的坐标系旋转45度,就是求一 ...

  9. HDU1559 最大子矩阵 (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1559 最大子矩阵 Time Limit: 30000/10000 MS (Java/Others)  ...

随机推荐

  1. word2vec c代码使用说明

    摘要: 1 分词 将文本语料进行分词,以空格,tab隔开都可以.生成分词后的语料 2 训练 对分词后的语料test.txt 进行训练得到模型文件vectors.bin /word2vec -train ...

  2. c语言中gets ,getschar 和fgets 的用法及三者之间的差别

    gets——从标准输入接收一串字符,遇到'\n'时结束,但不接收'\n',把 '\n'留存输入缓冲区:把接收的一串字符存储在形式参数指针指向的空间,并在最后自动添加一个'\0'.getchar——从标 ...

  3. As3.0 Interface 与类的使用

    来源:http://blog.sina.com.cn/s/blog_4d65c19e0100bfkb.html 抽象类:又叫抽象基类:可以包含一般类所包含的所有特性,例如,字段,属性,方法,抽象类不能 ...

  4. HAProxy与varnish

    Even if HAProxy can do TCP proxying, it is often used in front of web application, exactly where we ...

  5. td里的内容宽度自适应 及 鼠标放上显示标题div title

    td里的内容自适应宽度, 用 width:100%控制 strRight+="<td bordercolor='#DEDEDE' width='500px' height='50px' ...

  6. MySQL 对于千万级的大表要怎么优化

    转自知乎 作者:哈哈链接:http://www.zhihu.com/question/19719997/answer/81930332来源:知乎著作权归作者所有,转载请联系作者获得授权. 很多人第一反 ...

  7. Inno Setup入门(三)——指定压缩方式

    Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的时间或者需要更大的内存空间,可用的值如下: zip zip/1到zip/9 bzip bzip/1 到bzip/9 l ...

  8. 编译在android 平台上跑的C应用程序

    Android 用的是 Bionic C, 而不是通常的glibc,因此简单使用交叉工具链并不能够编译出适合运行在android 设备上的 C/C++ 程序. 交叉工具链可以很轻松在 Android ...

  9. ./encrypt: error while loading shared libraries: libcrypto.so.10:

    ./encrypt: error while loading shared libraries: libcrypto.so.10:

  10. 转 Oracle 12C 之 CDB/PDB用户的创建与对象管理

    在Oracle 12C中,账号分为两种,一种是公用账号,一种是本地账号(亦可理解为私有账号).共有账号是指在CDB下创建,并在全部PDB中生效的账号,另一种是在PDB中创建的账号. 针对这两种账号的测 ...