Code:

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #define setIO(s) freopen(s".in","r",stdin)
  5. #define maxn 400005
  6. #define inf 1000000009
  7. #define ll long long
  8. using namespace std;
  9. int head,tail;
  10. int S[maxn];
  11. ll le[maxn],ri[maxn],sumv[maxn],pos[maxn];
  12. ll sqr(ll x)
  13. {
  14. return 1ll*(1ll*x * 1ll*x);
  15. }
  16. struct Node
  17. {
  18. ll x,y;
  19. }nd[maxn];
  20. bool cmp(Node a,Node b)
  21. {
  22. return a.x<b.x;
  23. }
  24. ll Y(int f)
  25. {
  26. return (ll)(ri[f]+1ll*f*f);
  27. }
  28. ll X(int f)
  29. {
  30. return f;
  31. }
  32. double slope(int i,int j)
  33. {
  34. return (double)(Y(i)-Y(j))/(double)(X(i)-X(j));
  35. }
  36. void insert(int x)
  37. {
  38. if(tail<2)
  39. {
  40. if(tail==1)
  41. {
  42. if(X(x)==XS[++tail]=x;
  43. }
  44. else
  45. {
  46. S[++tail]=x;
  47. }
  48. return;
  49. }
  50. while(tail>1&&slope(S[tail-1], S[tail]) >= slope(S[tail-1], x)) --tail;
  51. S[++tail]=x;
  52. }
  53. int main()
  54. {
  55. // setIO("input");
  56. int n;
  57. scanf("%d",&n);
  58. for(int i=1;i<=n;++i) scanf("%lld%lld",&nd[i].x,&nd[i].y);
  59. sort(nd+1,nd+1+n,cmp);
  60. nd[0].x=-inf;
  61. for(int i=1;i<=n;++i) pos[i]=nd[i].x;
  62. for(int i=1;i<=n;++i)
  63. {
  64. sumv[i]=sumv[i-1];
  65. if(nd[i].y<0) sumv[i]-=nd[i].y;
  66. le[i]=le[i-1];
  67. if(nd[i-1].x!=nd[i].x) le[i]=sumv[i-1];
  68. }
  69. for(int i=1;i<=n;++i) sumv[i]=0;
  70. nd[n+1].x=inf;
  71. for(int i=n;i>=1;--i)
  72. {
  73. sumv[i]=sumv[i+1];
  74. if(nd[i].y>0) sumv[i]+=nd[i].y;
  75. ri[i]=ri[i+1];
  76. if(nd[i+1].x!=nd[i].x) ri[i]=sumv[i+1];
  77. }
  78. head=1;
  79. long long ans=100000000000000000;
  80. for(int i=1;i<=n;++i) insert(i);
  81. for(int i=1;i<=n;++i)
  82. {
  83. while(head<tail && pos[S[head]] < pos[i]) ++head;
  84. while(head<tail && slope(S[head], S[head+1]) < 2*pos[i]) ++head;
  85. if(head>tail) break;
  86. ans=min(ans, le[i] + sqr( (pos[i] - pos[S[head]]) ) + ri[S[head]]);
  87. // printf("%d %d %lld\n",i,S[head],ans);
  88. }
  89. printf("%lld\n",ans);
  90. return 0;
  91. }

  

Comet OJ - Contest #7 D 机器学习题 斜率优化 + 未调完的更多相关文章

  1. Comet OJ - Contest #11 A 水题

    Code: #include <bits/stdc++.h> #define N 3000000 using namespace std; char str[N]; int main() ...

  2. Comet OJ - Contest #4--前缀和

    原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...

  3. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  4. Comet OJ - Contest #13-C2

    Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...

  5. Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」

    来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...

  6. Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)

    来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...

  7. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  8. Comet OJ - Contest #2简要题解

    Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...

  9. Comet OJ - Contest #8

    Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...

随机推荐

  1. itchat初步解读登录(转)

    原文:https://blog.csdn.net/coder_pig/article/details/81357810 itchat的登录采取的是通过itchat.auto_login()这个函数来完 ...

  2. Matlab——表达式 阵列与矩阵的创建

    表达式 指令过长: 如果一个指令过长可以在结尾加上... 下一行继续写指令即可 若不想每次都显示运算结果,只需在运算式最後加上分号(:)即可 注释 基本的算术运算有: 加 (+).减 (-).乘 (* ...

  3. cocos2dx基础篇(14) 滚动视图CCScrollView

    [3.x]     (1)去掉 "CC"     (2)滚动方向         > CCScrollViewDirection 改为强枚举 ScrollView::Dire ...

  4. 在linux服务器上自动备份数据库

    脚本如下,没有任何问题: # !/usr/bin/pythonimport osimport timeimport datetimeimport pipesimport glob DB_HOST = ...

  5. 函数参数中经常见到的*args和**kwargs

    在python中,这两个是python中的可变参数,*arg表示任意多个无名参数,类型为tuple;**kwargs表示关键字参数,为dict. 例如下面这个代码可以利用*args计算传入的n个数的平 ...

  6. python调用java代码 java虚拟机(jvm)

    1.新建com文件夹,在里面新建 fibnq.java package com; public class fibnq { public fibnq(){} public int fb(int n){ ...

  7. Window7系统安装和使用MySql

    win7系统MySql安装和使用教程 首先下载mysql安装包 点击下载mysql v5.7.1 解压 下载完毕后解压在D盘 路径为D:\mysql-5.7.13-winx64,然后进入这个目录,新建 ...

  8. 【Linux-设备树】.dtb文件的反汇编

    在使用设备树时我们将**.dts文件利用dtc编译器编译为**.dtb文件. 在已知**.dtb文件的情况下我们有两种方法可以得到dts源码: 方法一:使用fdtdump工具进行反汇编 使用命令:ro ...

  9. P1177快速排序

    这是一个快速排序的模板题.拿到题后便写了quicksort(确定一个基准数,利用两个哨兵,把大的放右边,小的放左边,再递归实现排序),但是竟然TLE了60pts(???),于是翻看dalao们的题解, ...

  10. 嗨翻C语言--这里没有蠢问题(一)

    问:card_name[0]是什么意思?答:它是用户输入的第一个字符.如果用户输入了10,那么card_name[0]就将是1.问:总是得用/*和*/写注释吗?答:如果你的编译器支持C99标准,就可以 ...