wannafly 练习赛11 E 求最值(平面最近点对)
链接:https://www.nowcoder.com/acm/contest/59/E
时间限制:C/C++ 1秒,其他语言2秒
64bit IO Format: %lld
题目描述
给你一个长为n的序列a
定义f(i,j)=(i-j)2+g(i,j)2
输入描述:
第一行一个数n
之后一行n个数表示序列a
输出描述:
输出一行一个数表示答案
输入例子:
4
1 0 0 -1
输出例子:
1
-->
输入
4
1 0 0 -1
输出
1
备注:
对于100%的数据,2 <= n <= 100000 , |ai| <= 10000
//////////////////////////////////////////////////////////////////////////////////////////////////
用前缀和s[i]做y值,i做x值,问题等价与求平面最近点对之间的距离
放两个找的别人的平面最近点对的证明
https://www.zhihu.com/question/24755395
http://blog.csdn.net/yql_water/article/details/45939653
自己的代码是借鉴后面那个blog的
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <bits/stdc++.h>
#define mst(a,b) memset((a),(b), sizeof a)
#define lowbit(a) ((a)&(-a))
#define IOS ios::sync_with_stdio(0);cin.tie(0);
#define MP make_pair
#define PB push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod=1e9+;
const int maxn=1e5+;
struct node{
int x,y;
bool operator<(const node&p)const{return x<p.x;}
}a[maxn];
ll dis(int L,int R){
return (ll)(a[L].x-a[R].x)*(a[L].x-a[R].x)+(ll)(a[L].y-a[R].y)*(a[L].y-a[R].y);
}
ll dfs(int L,int R,vector<int>&t){
if(R-L<=){
if(R==L){t.PB(L);return INF;}
if(a[L].y>a[R].y)t.PB(R),t.PB(L);
else t.PB(L),t.PB(R);
return dis(L,R);
}
vector<int>tl,tr;
int mid=(L+R)>>;
ll mm=min(dfs(L,mid,tl),dfs(mid+,R,tr));
int i=,j=,n=tl.size(),m=tr.size();
while(i<n||j<m){
if(j>=m||i<n&&a[tl[i]].y<a[tr[j]].y)t.PB(tl[i++]);
else t.PB(tr[j++]);
}
for(i=;i<t.size();++i)for(j=;j<&&j+i<t.size();++j)
mm=min(mm,dis(t[i],t[i+j]));
return mm;
}
int main(){
#ifdef local
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif
int n;scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&a[i].x),a[i].x+=a[i-].x,a[i].y=i;
sort(a+,a++n);
vector<int>t;
printf("%lld",dfs(,n,t));
return ;
}
wannafly 练习赛11 E 求最值(平面最近点对)的更多相关文章
- wannafly 练习赛11 F 求子树(树上莫队+换根)
链接:https://www.nowcoder.com/acm/contest/59/F 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...
- 牛客网 牛客练习赛11 D.求距离
D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...
- wannafly 练习赛11 B 假的字符串(字典树+建边找环)
链接:https://www.nowcoder.com/acm/contest/59/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit ...
- ACM3 求最值
/*2*2014.11.18*求最值*描述:给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值.*输入:多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空 ...
- hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场
题意: 输入一行数字,查询第i个数到第j个数之间的最大值.可以修改其中的某个数的值. 输入: 包含多组输入数据. 每组输入首行两个整数n,m.表示共有n个数,m次操作. 接下来一行包含n个整数. 接下 ...
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...
- hdu 1754 I Hate It(线段树区间求最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 牛客练习赛11 假的字符串 (Trie树+拓扑找环)
牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字 ...
- NC15052 求最值
NC15052 求最值 题目 题目描述 给你一个长为 \(n\) 的序列 \(a\) 定义 \(f(i,j)=(i-j)^2+g(i,j)^2\) \(g\) 是这样的一个函数 求最小的 \(f(i, ...
随机推荐
- TableLayoutPanel
1.简单属性 百度经验:https://jingyan.baidu.com/article/9113f81b7966df2b3314c775.html Name属性:tableLayoutPanel经 ...
- js中this.index使用
上面圈出的那句没有执行,因为this.index 是undefined,(也不能直接使用i取代this.index,原因是i不是变化的值,使用alert打印输出的i值始终为3) 解决方式:在for语句 ...
- Javaweb实训-宠物医院-社区宠物医院的页面样式
/* CSS Document */ /* 对于CSS来说 每一个元素默认的margin和padding就是0px.但是不同的浏览器会有一个默认的浏览器样式修改默认的marg ...
- golang中如何阻塞等待所有goroutines都完成
有一天,一个人问了我此问题,回头仔细翻阅了一下资料,仔细的想了一下,这个问题的解决有两种方案.方案一:也是推荐方案,也是官方推荐方案,涉及到一个写并发经常关注的模块sync模块,利用里面的sync.W ...
- php强大的filter过滤用户输入
<?php $filters = array //定义过滤的数组 ( "name" => array ( "filter"=>FILTER_S ...
- scp 从另一台linux服务器拷贝文件或文件目录
格式:scp [参数] [原路径] [目标路径] download 使用方法:scp -r root@127.0.0.1:/opt/soft/test /opt/soft/ scp -r 用户名@IP ...
- Java Script语法
JavaScript 语法 JavaScript 是一个程序语言.语法规则定义了语言结构. JavaScript 语法 JavaScript 是一个脚本语言. 它是一个轻量级,但功能强大的编程语言. ...
- angularjs 代码结构两种写法
1.当路由中不写controller的时候,controller写在对应的html表单中 2.若要写在路由中,如下 3.转到相应的路由(页面) 1.采用location服务 2.采用 transiti ...
- python 后台 安装 富文本编辑
前言 当然需要安装一些后台只能输入一些文本编辑器,不然这样多少不美观呀 当然python 有 safe 可以把后台的标签转换 , 还有 striptags 这个是换成html 格式的,但不会加粗或 ...
- scrapy中的selenium
引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们会发现 ...