【无聊放个模板系列】BZOJ 1597 斜率优化
STL 双向队列DEQUE版本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define Maxn 50010
#define LL long long struct node
{
LL x,y;
}t[Maxn]; bool cmp(node x,node y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);} deque<node > q;
LL f[Maxn]; bool check(node x,node y,LL k)
{
return (y.y-x.y)<=k*(y.x-x.x);
} bool check2(node x,node y,node z)
{
return (y.y-x.y)*(z.x-y.x)>=(y.x-x.x)*(z.y-y.y);
} int main()
{
LL n;
scanf("%lld",&n);
for(LL i=;i<=n;i++) scanf("%lld%lld",&t[i].x,&t[i].y);
sort(t+,t++n,cmp);
/*LL p=1;
for(LL i=2;i<=n;i++) if(t[i].x>t[p].x&&t[i].y<t[p].y) t[++p]=t[i];*/ LL p=;
for(LL i=;i<=n;i++)
{
while(p>&&t[i].y>=t[p].y) p--;
t[++p]=t[i];
} while(!q.empty()) q.pop_back();
node ft;ft.x=t[].y,ft.y=;q.push_front(ft);
for(LL i=;i<=p;i++)
{
while(q.size()>)
{
node x=q.front();q.pop_front();
if(!check(x,q.front(),-t[i].x)) {q.push_front(x);break;}
}
node tt;
f[i]=q.front().y+t[i].x*q.front().x;
tt.x=t[i+].y;tt.y=f[i];
while(q.size()>)
{
node x=q.back();q.pop_back();
if(!check2(tt,x,q.back())) {q.push_back(x);break;}
}
q.push_back(tt);
// printf("%d\n",f[i]);
}
printf("%lld\n",f[p]);
return ;
}
手打队列版本
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define Maxn 50010
#define LL long long struct hp
{
LL x,y;
}a[Maxn]; bool cmp(hp x,hp y) {return (x.x==y.x)?(x.y<y.y):(x.x<y.x);} struct node
{
LL x,y;
}t[Maxn]; LL f[Maxn]; bool check(int x,int y,int k)
{
LL kk=k;
return kk*(t[x].x-t[y].x)<=t[x].y-t[y].y;
} bool check2(int x,int y,int z)
{
return (t[y].x-t[z].x)*(t[x].y-t[y].y)<=(t[x].x-t[y].x)*(t[y].y-t[z].y);
} int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
sort(a+,a++n,cmp);
int cnt=;
for(int i=;i<=n;i++)
{
while(cnt>&&a[i].y>=a[cnt].y) cnt--;
a[++cnt]=a[i];
}
int len=,st;
t[++len].x=a[].y;t[len].y=;st=;
for(int i=;i<=cnt;i++)
{
while(st<len&&check(st,st+,-a[i].x)) st++;
f[i]=a[i].x*t[st].x+t[st].y;
t[].x=a[i+].y;t[].y=f[i];
while(st<len&&check2(len-,len,)) len--;
t[++len]=t[];
// printf("%lld\n",f[i]);
}
printf("%lld\n",f[cnt]);
return ;
}
斜率优化
2016-11-18 08:30:47
【无聊放个模板系列】BZOJ 1597 斜率优化的更多相关文章
- 【无聊放个模板系列】BZOJ 3172 (AC自动机)
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】HDU 3506 (四边形不等式优化DP-经典石子合并问题[环形])
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】POJ 3678 2-SAT
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】POJ 1274 (匈牙利)
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】HDU 1269 (SCC)
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】HDU 1358 KMP
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】HDU 3068 MANACHER
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 【无聊放个模板系列】POJ2752 EXKMP
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- 学渣乱搞系列之dp斜率优化
学渣乱搞系列之dp斜率优化 By 狂徒归来 貌似dp的斜率优化一直很难搞啊,尤其是像我这种数学很挫的学渣,压根不懂什么凸包,什么上凸下凸的,哎...说多了都是泪,跟wdd讨论了下,得出一些结论.本文很 ...
随机推荐
- iOS 9 之后更改状态栏字体颜色
设置statusBar的[前景部分] 简单来说,就是设置显示电池电量.时间.网络部分标示的颜色, 这里只能设置两种颜色: 默认的黑色(UIStatusBarStyleDefault) 白色(UISta ...
- css3学习笔记之用户界面
CSS3 调整尺寸(Resizing) CSS3中,resize属性指定一个元素是否应该由用户去调整大小. 这个 div 元素由用户调整大小. (在 Firefox 4+, Chrome, 和 Saf ...
- 4月1日学习笔记(CSS基础)
CSS初始化 内边距padding padding属性宽度是按照上右下左的顺序来的,否则单独设置就是padding-left... 边框border border可以设置样式(border-style ...
- Linux进程调度
原文地址: http://cchxm1978.blog.163.com/blog/static/35428253201092910491682/ 相当不错的文章,读了后收藏,多谢博主分享! ----- ...
- 0<=i<iLen 在C++中
for( i=0;0<= i<2; i++)这样的话会出现什么错误呢? 一直循环下去, 因为i>=一直成立
- d3 之值域映射
<html> <head> <meta charset="utf-8"> <title>d3研究室</title> &l ...
- jQuery网页元素拖拽插件
效果说明:配合已有CSS样式,载入插件后,网页元素可以随意在窗口内拖拽,设置了原位置半透明和拖拽半透明的效果选项,可根据需要选择.另外,当页面上有多个可拖拽元素时,可以载入另外一个用于设置z-inde ...
- Winform程序只允许运行一个程序实例
/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { Application ...
- 弹性布局学习-详解align-content(六)
弹性布局学习-详解align-content(六)
- 《HTML5 CANVAS基础教程》读书笔记
一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...