Comet OJ - Contest #7 D 机器学习题 斜率优化 + 未调完
Code:
#include <cstdio>
#include <algorithm>
#include <cstring>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 400005
#define inf 1000000009
#define ll long long
using namespace std;
int head,tail;
int S[maxn];
ll le[maxn],ri[maxn],sumv[maxn],pos[maxn];
ll sqr(ll x)
{
return 1ll*(1ll*x * 1ll*x);
}
struct Node
{
ll x,y;
}nd[maxn];
bool cmp(Node a,Node b)
{
return a.x<b.x;
}
ll Y(int f)
{
return (ll)(ri[f]+1ll*f*f);
}
ll X(int f)
{
return f;
}
double slope(int i,int j)
{
return (double)(Y(i)-Y(j))/(double)(X(i)-X(j));
}
void insert(int x)
{
if(tail<2)
{
if(tail==1)
{
if(X(x)==XS[++tail]=x;
}
else
{
S[++tail]=x;
}
return;
}
while(tail>1&&slope(S[tail-1], S[tail]) >= slope(S[tail-1], x)) --tail;
S[++tail]=x;
}
int main()
{
// setIO("input");
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%lld%lld",&nd[i].x,&nd[i].y);
sort(nd+1,nd+1+n,cmp);
nd[0].x=-inf;
for(int i=1;i<=n;++i) pos[i]=nd[i].x;
for(int i=1;i<=n;++i)
{
sumv[i]=sumv[i-1];
if(nd[i].y<0) sumv[i]-=nd[i].y;
le[i]=le[i-1];
if(nd[i-1].x!=nd[i].x) le[i]=sumv[i-1];
}
for(int i=1;i<=n;++i) sumv[i]=0;
nd[n+1].x=inf;
for(int i=n;i>=1;--i)
{
sumv[i]=sumv[i+1];
if(nd[i].y>0) sumv[i]+=nd[i].y;
ri[i]=ri[i+1];
if(nd[i+1].x!=nd[i].x) ri[i]=sumv[i+1];
}
head=1;
long long ans=100000000000000000;
for(int i=1;i<=n;++i) insert(i);
for(int i=1;i<=n;++i)
{
while(head<tail && pos[S[head]] < pos[i]) ++head;
while(head<tail && slope(S[head], S[head+1]) < 2*pos[i]) ++head;
if(head>tail) break;
ans=min(ans, le[i] + sqr( (pos[i] - pos[S[head]]) ) + ri[S[head]]);
// printf("%d %d %lld\n",i,S[head],ans);
}
printf("%lld\n",ans);
return 0;
}
Comet OJ - Contest #7 D 机器学习题 斜率优化 + 未调完的更多相关文章
- Comet OJ - Contest #11 A 水题
Code: #include <bits/stdc++.h> #define N 3000000 using namespace std; char str[N]; int main() ...
- Comet OJ - Contest #4--前缀和
原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...
- Comet OJ - Contest #11 题解&赛后总结
Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...
- Comet OJ - Contest #13-C2
Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...
- Comet OJ - Contest #13 「火鼠的皮衣 -不焦躁的内心-」
来源:Comet OJ - Contest #13 芝士相关: 复平面在信息学奥赛中的应用[雾 其实是道 sb 题??? 发现原式貌似十分可二项式定理,然后发现确实如此 我们把 \(a^i\) 替换成 ...
- Comet OJ - Contest #13 「佛御石之钵 -不碎的意志-」(hard)
来源:Comet OJ - Contest #13 一眼并查集,然后发现这题 tmd 要卡常数的说卧槽... 发现这里又要用并查集跳过访问点,又要用并查集维护联通块,于是开俩并查集分别维护就好了 一开 ...
- Comet OJ - Contest #2 简要题解
Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...
- Comet OJ - Contest #2简要题解
Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...
- Comet OJ - Contest #8
Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...
随机推荐
- if you wanna the rainbow, you have to deal with the rain.
bulk. n. 大量 reluctant. adj. 不情愿的 terrorist. n. 恐怖分子 recognition. n. 认出 tout.v. 兜售 conceal.v. 隐藏 dras ...
- Go语言入门篇-基本数据类型
一.程序实体与关键字 任何Go语言源码文件都由若干个程序实体组成的.在Go语言中,变量.常量.函数.结构体和接口被统称为“程序实体”,而它们的名字被统称为“标识符”. 标识符可以是任何Unicode编 ...
- [JS] 鼠标点击文本框清空默认值,离开文本框恢复默认值
在使用文本框的时候,若设定了初始值,选择文本框进行输入的时候要将本来的内容进行删除,会显得非常麻烦 可以在文本框属性定义触发onfocus和onblur两个事件时对应的js功能 下面以asp.net代 ...
- 比较css中单位px,em和rem的区别
国内的设计师大都喜欢用px,而国外网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? px特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原 ...
- Linux 创建与删除(5)
相对于Windows下的右键新建文件与删除,我更喜爱Linux下的命令式创建与删除,真的方便.不过Windows下也可以借助工具来实现,比如git bash.cmder等等终端工具. 创建文件 新建文 ...
- 状态压缩dp相关
状态压缩dp 状态压缩是设计dp状态的一种方式. 当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总 量很少是,可以将多维状态压缩为一维来记录. 这种题目最明显的特征就是: 都存在某一给 ...
- 【模板】最长上升子序列(LIS)及其优化 & 洛谷 AT2827 LIS
最长上升子序列 传送门 题意 对于给定的一个n个数的序列,找到它的一个最长的子序列,并且保证这个子序列是由低到高排序的. 例如,1 6 2 5 4 6 8的最长上升子序列为1 2 4 6 8. 基本思 ...
- 基于 Redux + Redux Persist 进行状态管理的 Flutter 应用示例
好久没在 SegmentFault 写东西,唉,也不知道 是忙还是懒,以后有时间 再慢慢写起来吧,最近开始学点新东西,有的写了,个人博客跟这里同步. 一直都在自己的 React Native 应用中使 ...
- 【NOI2007】项链工厂 ——老题新做.jpg
第一次是用 ODT 过的...(虽说跑得飞慢但它就是能过) 而且还写了发题解... 第二次是在考场上碰到了这道题,然后居然打了线段树,各种 bug 直接让代码爆零 但还是补好了代码重新交了一发,发现跑 ...
- 通过编写串口助手工具学习MFC过程——(七)添加Tab Control控件
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...