codeforces 455E Convex hull trick
来源:互联网 发布:win7重装网络协议 编辑:程序博客网 时间:2024/06/15 20:54
简略题意:给出n个数
考虑暴力,对于一个询问
*简略证明:如果存在某个
那么假定我们已知
转化一下形式得
我们就把问题转化成了Convex hull trick可以处理的问题。
线段树存Cht, 每个区间拆开单独询问即可, 复杂度
#include <bits/stdc++.h>#define all(x) x.begin(), x.end()using namespace std;typedef long long LL;const int maxn = 110000;int n;struct line { LL k, b; LL getval(LL x) { return k * x + b; } bool operator < (const line & rhs) const { return k > rhs.k || (k == rhs.k && b < rhs.b); }} ll[maxn];LL a[maxn], sum[maxn];double pos(line a, line b) { return 1.0*(b.b-a.b)/(a.k-b.k);}LL ans, px;struct A { vector<line> V; void getx(LL x) { LL L = 0, R = V.size() - 1, M; while(L < R) { M = (L + R) >> 1; M++; if(pos(V[M-1], V[M]) > px) R = M - 1; else L = M; } ans = min(ans, V[L].getval(px)); } void show() { for(int i = 0; i < V.size(); i++) cout<<V[i].k<<" "<<V[i].b<<endl; }} tr[maxn<<2];void build(int l, int r, int rt) { vector<line> ss; for(int i = l; i <= r; i++) ss.push_back(ll[i]); sort(all(ss)); auto &buf = tr[rt].V; buf.push_back(ss[0]); for(int i = 1; i < ss.size(); i++) { if(ss[i].k < ss[i-1].k) { while(buf.size() >= 2 && pos(buf[buf.size()-2], buf[buf.size()-1]) >= pos(buf[buf.size()-2], ss[i])) buf.pop_back(); buf.push_back(ss[i]); } } if(l == r) return ; int m = (l + r) >> 1; build(l, m, rt<<1); build(m+1, r, rt<<1|1);}void ask(int L, int R, int l, int r, int rt) { if(L <= l && R >= r) { tr[rt].getx(px); return ; } int m = (l + r) >> 1; if(L <= m) ask(L, R, l, m, rt<<1); if(R > m) ask(L, R, m+1, r, rt<<1|1);}int main() { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%lld", &a[i]), sum[i] = sum[i-1] + a[i], ll[i].k = a[i], ll[i].b = i*a[i]-sum[i]; build(1, n, 1); int q; scanf("%d", &q); while(q--) { LL x, y; scanf("%lld%lld", &x, &y); ans = 1e18, px = x - y; ask(y-x+1, y, 1, n, 1); printf("%lld\n", ans + sum[y]); } return 0;}
阅读全文
0 0
- codeforces 455E Convex hull trick
- Convex hull trick算法
- Convex hull trick算法介绍
- convex hull
- Convex Hull
- convex hull
- Codeforces 838E E. Convex Countour DP
- UVA 11626 Convex Hull
- UVa 11626 - Convex Hull
- Convex hull: Graham scan
- HDU4697 Convex hull
- poj 3405 Convex hull
- ZOJ 3871 Convex Hull
- 凸壳求解convex hull
- 凸包(convex hull)
- 凸包(Convex hull)
- UVa 681 - Convex Hull Finding
- uva 681 Convex Hull Finding
- POJ 1276 Cash Machine(多重背包)
- Java 泛型详解
- 使用阿里云实现简单的直播
- JS数组二分法查找
- Android第六天之Eclipse问题
- codeforces 455E Convex hull trick
- List 与Set 的一点区别
- Javascript中!!(两个感叹号,双感叹号)的含义
- 带有集成电源的隔离式RS-485通信
- shell学习十--expr及expr和let性能比较
- Android Arcgis(16)、网络图层加载二
- 九十年代的歌
- 第二十八天
- HDU 2571 命运(dp)