通过坐标变换x'=x-y+n和y'=x+y,开大两倍空间就可以用一个两倍大的二维矩阵中

从[x'-a,y'-a]到[x'+a,y'+a]这个子矩阵表示原图中到(x,y)曼哈顿距离小于等于a的菱形区域啦

二维的离散化就是把(x,y)映射到x*n+y这个一维数列上

这题极限空间应该是log(2n)*log(2n)*m吧。。这是2e7左右了呀,不知道4e6怎么过的?可能离散不出那么多严格的logN吧

 1 //#include<bits/stdc++.h>
 2 //#pragma comment(linker, "/STACK:1024000000,1024000000")
 3 #include<stdio.h>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<string.h>
 7 #include<iostream>
 8 #include<math.h>
 9 #include<stack>
10 #include<set>
11 #include<map>
12 #include<vector>
13 #include<iomanip>
14 #include<bitset>
15 using namespace std;         //
16
17 #define ll long long
18 #define ull unsigned long long
19 #define pb push_back
20 #define FOR(a) for(int i=1;i<=a;i++)
21 #define sqr(a) (a)*(a)
22 #define dis(a,b) sqrt(sqr(a.x-b.x)+sqr(a.y-b.y))
23 ll qp(ll a,ll b,ll mod){
24     ll t=1;while(b){if(b&1)t=t*a%mod;b>>=1;a=a*a%mod;}return t;
25 }
26 struct DOT{int x;int y;};
27 inline void read(int &x){int k=0;char f=1;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())k=k*10+c-'0';x=k*f;}
28 void ex(){puts("No");exit(0);}
29 const int dx[4]={0,0,-1,1};
30 const int dy[4]={1,-1,0,0};
31 const int inf=0x3f3f3f3f;
32 const ll Linf=0x3f3f3f3f3f3f3f3fLL;
33 const ll Mod=1e18+7;
34 const double eps=1e-6;
35 const double pi=acos(-1.0);
36
37
38
39 inline int lowbit(int x){return x&-x;}
40
41 const int maxn=8e4+33;
42
43 int op[maxn],posx[maxn],posy[maxn];
44 int v[maxn],h[4000050],tree[4000050],n,m,N,cnt;
45
46 void add(int x,int y,int z){
47     for(int i=x;i<=N;i+=lowbit(i)){
48         for(int j=y;j<=N;j+=lowbit(j)){
49             int pos=lower_bound(h,h+cnt,i*N+j)-h;
50             tree[pos]+=z;
51         }
52     }
53 }
54 int ask(int x,int y){
55     int ans=0;
56     for(int i=x;i>0;i-=lowbit(i)){
57         for(int j=y;j>0;j-=lowbit(j)){
58             int pos=lower_bound(h,h+cnt,i*N+j)-h;
59             if(h[pos]==i*N+j)ans+=tree[pos];
60         }
61     }
62     return ans;
63 }
64
65 int main(){
66     while(scanf("%d",&n)&&n){
67         memset(tree,0,sizeof tree);
68         int x,y;
69         N=2*n;
70         cnt=0;
71         scanf("%d",&m);
72         for(int i=1;i<=m;i++){
73             scanf("%d%d%d%d",&op[i],&x,&y,&v[i]);
74             int xx=x-y+n;int yy=x+y;
75             posx[i]=xx;
76             posy[i]=yy;
77             if(op[i]==1){
78                 for(int j=xx;j<=N;j+=lowbit(j)){
79                     for(int k=yy;k<=N;k+=lowbit(k)){
80                         h[cnt++]=j*N+k;
81                     }
82                 }
83             }
84         }
85         sort(h,h+cnt);
86         for(int i=1;i<=m;i++){
87             if(op[i]==1)add(posx[i],posy[i],v[i]);
88             else{
89                 int X1=max(1,posx[i]-v[i]),Y1=max(1,posy[i]-v[i]);
90                 int X2=min(N,posx[i]+v[i]),Y2=min(N,posy[i]+v[i]);
91                 printf("%d\n",ask(X2,Y2)+ask(X1-1,Y1-1)
92                         -ask(X2,Y1-1)-ask(X1-1,Y2)
93                         );
94             }
95         }
96     }
97 }

View Code

转载于:https://www.cnblogs.com/Drenight/p/8678516.html

Crowd HDU - 4456 曼哈顿距离转切比雪夫距离的坐标变换与二维坐标离散化相关推荐

  1. 曼哈顿距离和切比雪夫距离链接

    存一下链接慢慢看 曼哈顿距离和切比雪夫距离 这个更清晰一些: 关于曼哈顿距离和切比雪夫距离 NN中常用的距离计算公式:欧式距离.曼哈顿距离.马氏距离.余弦.汉明距离

  2. 曼哈顿距离与切比雪夫距离的转化及prufer序列

    目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...

  3. ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli

    ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...

  4. 什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“

    什么是范数,及其对应的 "曼哈顿距离"."欧式距离"."闵氏距离"."切比雪夫距离" 一.什么是范数 二.欧式距离(对应 ...

  5. 数据的距离度量 一、欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离

    数据的距离度量 一.欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离 前言 欧式距离 标准欧式距离 曼哈顿距离 闵氏距离 切比雪夫距离 兰氏距离 马氏距离 前言 本篇记录一下常用的数据 ...

  6. 曼哈顿距离和切比雪夫距离转换

    设平面空间内存在两点,它们的坐标为(x1,y1) (x2,y2) 曼哈顿距离 dis=|x1−x2|+|y1−y2|,即两点横纵坐标差之和. 切比雪夫距离 dis=max(|x1−x2|,|y1−y2 ...

  7. 曼哈顿距离与切比雪夫距离及其相互转化

    文章目录 曼哈顿距离与切比雪夫距离及其相互转化 1.算法分析 1.1 曼哈顿距离 1.2 切比雪夫距离 1.3 两者之间的关系 1.4 用处 2.典型例题 曼哈顿距离与切比雪夫距离及其相互转化 1.算 ...

  8. 【计几】曼哈顿距离与切比雪夫距离

    讲解链接: 距离 OI Wiki 曼哈顿距离与切比雪夫距离:为何要相互转化 我们设 dM(A,B)d_M(A,B)dM​(A,B) 为点 AAA 和点 BBB 的曼哈顿距离, dQ(A,B)d_Q(A ...

  9. 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...

    引用:http://blog.csdn.net/shiwei408/article/details/7602324 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurem ...

  10. 曼哈顿距离和切比雪夫距离

    转载 https://www.cnblogs.com/zwfymqz/p/8253530.html 本文只讨论二维空间中的曼哈顿距离与切比雪夫距离 曼哈顿距离 定义 设平面空间内存在两点,它们的坐标为 ...

最新文章

  1. php MySQL快速入门_PHP 连接 MySQL
  2. canal介绍和使用docker安装canal
  3. mysql5.7环境搭建_mysql5.7.13环境搭建教程(解压缩版)
  4. 局域网Ubuntu与WinXP实现文件共享
  5. linux远程连接 ipv6,Ansible 配置 IPv6 连接
  6. Android应用程序的debug属性
  7. Effective C++条款7:为多态基类声明virtual析构函数
  8. 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
  9. 协同过滤相关算法(1):SVD
  10. PHPWAMP出现无响应的解决方案,PHPWAMP集成环境在某些系统无响应什么办?
  11. sqlserver200864位下载_microsoft sql server 2008官方下载|Microsoft SQL Server 200832/64位 完整版_ - 极光下载站...
  12. 华为手机手机与计算机传输,华为手机怎么和电脑进行互联传输文件
  13. openedge-hub模块请求处理源码浅析——百度BIE边缘侧openedge项目源码阅读(2)
  14. 【科普】1分钟帮你搞懂机械硬盘和固态硬盘
  15. 知云文献翻译软件及遇到的一些问题
  16. v免签对接易支付插件(已测试)
  17. 图文档管理系统-让企业图文档管理“井井有条”
  18. 网狐棋牌为服务器大厅加载游戏注意事项
  19. 【附源码】Python计算机毕业设计码码科技公司招投标管理系统
  20. JanusGraph服务器

热门文章

  1. 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
  2. 关于random的多种用法
  3. c语言memset函数作用,详解C语言中的memset()函数
  4. 基于springboot的多人聊天系统
  5. linux top 网络,Linux Top 详解
  6. php中点号是什么意思,深入解析PHP中逗号与点号的区别
  7. php无法写入json,php json解析不出来怎么办
  8. vscode还用装git_在windows下搭建编程环境git+vscode安装配置教程
  9. PHP 单元测试问题记录
  10. window 下 go lang 环境变量一键批处理设置