Crowd HDU - 4456 曼哈顿距离转切比雪夫距离的坐标变换与二维坐标离散化
通过坐标变换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 曼哈顿距离转切比雪夫距离的坐标变换与二维坐标离散化相关推荐
- 曼哈顿距离和切比雪夫距离链接
存一下链接慢慢看 曼哈顿距离和切比雪夫距离 这个更清晰一些: 关于曼哈顿距离和切比雪夫距离 NN中常用的距离计算公式:欧式距离.曼哈顿距离.马氏距离.余弦.汉明距离
- 曼哈顿距离与切比雪夫距离的转化及prufer序列
目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...
- ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli
ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...
- 什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“
什么是范数,及其对应的 "曼哈顿距离"."欧式距离"."闵氏距离"."切比雪夫距离" 一.什么是范数 二.欧式距离(对应 ...
- 数据的距离度量 一、欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离
数据的距离度量 一.欧式距离,曼哈顿距离,闵氏距离,切比雪夫距离,兰氏距离,马氏距离 前言 欧式距离 标准欧式距离 曼哈顿距离 闵氏距离 切比雪夫距离 兰氏距离 马氏距离 前言 本篇记录一下常用的数据 ...
- 曼哈顿距离和切比雪夫距离转换
设平面空间内存在两点,它们的坐标为(x1,y1) (x2,y2) 曼哈顿距离 dis=|x1−x2|+|y1−y2|,即两点横纵坐标差之和. 切比雪夫距离 dis=max(|x1−x2|,|y1−y2 ...
- 曼哈顿距离与切比雪夫距离及其相互转化
文章目录 曼哈顿距离与切比雪夫距离及其相互转化 1.算法分析 1.1 曼哈顿距离 1.2 切比雪夫距离 1.3 两者之间的关系 1.4 用处 2.典型例题 曼哈顿距离与切比雪夫距离及其相互转化 1.算 ...
- 【计几】曼哈顿距离与切比雪夫距离
讲解链接: 距离 OI Wiki 曼哈顿距离与切比雪夫距离:为何要相互转化 我们设 dM(A,B)d_M(A,B)dM(A,B) 为点 AAA 和点 BBB 的曼哈顿距离, dQ(A,B)d_Q(A ...
- 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...
引用:http://blog.csdn.net/shiwei408/article/details/7602324 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurem ...
- 曼哈顿距离和切比雪夫距离
转载 https://www.cnblogs.com/zwfymqz/p/8253530.html 本文只讨论二维空间中的曼哈顿距离与切比雪夫距离 曼哈顿距离 定义 设平面空间内存在两点,它们的坐标为 ...
最新文章
- php MySQL快速入门_PHP 连接 MySQL
- canal介绍和使用docker安装canal
- mysql5.7环境搭建_mysql5.7.13环境搭建教程(解压缩版)
- 局域网Ubuntu与WinXP实现文件共享
- linux远程连接 ipv6,Ansible 配置 IPv6 连接
- Android应用程序的debug属性
- Effective C++条款7:为多态基类声明virtual析构函数
- 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
- 协同过滤相关算法(1):SVD
- PHPWAMP出现无响应的解决方案,PHPWAMP集成环境在某些系统无响应什么办?
- sqlserver200864位下载_microsoft sql server 2008官方下载|Microsoft SQL Server 200832/64位 完整版_ - 极光下载站...
- 华为手机手机与计算机传输,华为手机怎么和电脑进行互联传输文件
- openedge-hub模块请求处理源码浅析——百度BIE边缘侧openedge项目源码阅读(2)
- 【科普】1分钟帮你搞懂机械硬盘和固态硬盘
- 知云文献翻译软件及遇到的一些问题
- v免签对接易支付插件(已测试)
- 图文档管理系统-让企业图文档管理“井井有条”
- 网狐棋牌为服务器大厅加载游戏注意事项
- 【附源码】Python计算机毕业设计码码科技公司招投标管理系统
- JanusGraph服务器
热门文章
- 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
- 关于random的多种用法
- c语言memset函数作用,详解C语言中的memset()函数
- 基于springboot的多人聊天系统
- linux top 网络,Linux Top 详解
- php中点号是什么意思,深入解析PHP中逗号与点号的区别
- php无法写入json,php json解析不出来怎么办
- vscode还用装git_在windows下搭建编程环境git+vscode安装配置教程
- PHP 单元测试问题记录
- window 下 go lang 环境变量一键批处理设置