链接:https://www.nowcoder.com/acm/contest/59/E

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给你一个长为n的序列a

定义f(i,j)=(i-j)2+g(i,j)2

g是这样的一个函数
求最小的f(i,j)的值,i!=j

输入描述:

第一行一个数n
之后一行n个数表示序列a

输出描述:

输出一行一个数表示答案

输入例子:
4
1 0 0 -1
输出例子:
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 求最值(平面最近点对)的更多相关文章

  1. wannafly 练习赛11 F 求子树(树上莫队+换根)

    链接:https://www.nowcoder.com/acm/contest/59/F 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64b ...

  2. 牛客网 牛客练习赛11 D.求距离

    D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...

  3. wannafly 练习赛11 B 假的字符串(字典树+建边找环)

    链接:https://www.nowcoder.com/acm/contest/59/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit ...

  4. ACM3 求最值

    /*2*2014.11.18*求最值*描述:给定N个整数(1<=N<=100),求出这N个数中的最大值,最小值.*输入:多组数据,第一行为一个整数N,第二行为N个不超过100的正整数,用空 ...

  5. hdu 1754 I Hate It(树状数组区间求最值)2007省赛集训队练习赛(6)_linle专场

    题意: 输入一行数字,查询第i个数到第j个数之间的最大值.可以修改其中的某个数的值. 输入: 包含多组输入数据. 每组输入首行两个整数n,m.表示共有n个数,m次操作. 接下来一行包含n个整数. 接下 ...

  6. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

  7. hdu 1754 I Hate It(线段树区间求最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. 牛客练习赛11 假的字符串 (Trie树+拓扑找环)

    牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字 ...

  9. NC15052 求最值

    NC15052 求最值 题目 题目描述 给你一个长为 \(n\) 的序列 \(a\) 定义 \(f(i,j)=(i-j)^2+g(i,j)^2\) \(g\) 是这样的一个函数 求最小的 \(f(i, ...

随机推荐

  1. CF 1136C Nastya Is Transposing Matrices

    题目链接:http://codeforces.com/problemset/problem/1136/C 题目分析 看了题目之后,第一想法:任意位置都可以倒置,要是枚举,铁定的超时.所以需要探索规律. ...

  2. css3的calc属性不生效问题

    css3的 calc:计算属性.由于自己做的项目中这个属性不常用到,偶尔用一次还没效果. 后来研究了下是因为运算符两边没加空格. 错误示例:.content{width:calc(100%-50px) ...

  3. [转载]Linux内核编译

    原文地址:https://blog.csdn.net/qq_34247099/article/details/50949720 写在前面的话: 本人大二,东南大学一个软工狗,正在修一门名为<操作 ...

  4. [转载]Linux查看文件编码格式及文件编码转换

    原文地址:https://blog.csdn.net/gatieme/article/details/55045883 3 linux下查看编码的方法 方法一:file filename file c ...

  5. HRBUST 1849 商品中心

    vjudge 智商掉线... 可以发现一条边能贡献其他点当且仅当两点路径上这个边权值最小,所以如果按照边权从大到小加边,每加一条边就会合并两个联通块,那么一个联通块内的点到另一个联通块的点的权值就都是 ...

  6. JavaScript concat() 方法

    昨天接触了一个项目,我的tbody变量是一个数组,然后数据返回的是数组里面包含对象,我刚开始没看懂这个concat的作用,然后百度一下javascript中的用法,以此记录concat的方法: dat ...

  7. python程序超时处理 timeout_decorator

    如下两个例子,实现对某个函数的超时处理(其实就是加了一个装饰器timeout): 成功例子: 代码: import time import timeout_decorator @timeout_dec ...

  8. 关于ftp无法链接的情况

    首先查看ftp是否安装 systemctl status vsftpd 如果没有先安装 yum install vsftpd 然后启动 systemctl start vsftpd 如果有报错 Job ...

  9. KVM虚拟化网卡管理

    brctl常用命令 查看当前虚拟网桥状态 brctl show 添加一个网桥 addbr 删除一个网桥 delbr 添加网口 addif 删除网口 delif VALN LAN 表示 Local Ar ...

  10. Vue基础第一章

    Vue的简单示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...