51nod1488 帕斯卡小三角形
题目
题目链接
解题思路
首先有一个关键性质:我们一定是从某个点开始一直往下走,然后一直往右下走。
从 ( 1 , i ) (1,i) (1,i)走到 ( x , y ) (x,y) (x,y)的代价是 s u m [ y ] − s u m [ i ] + ( x − y + i ) ∗ a [ i ] sum[y]-sum[i]+(x-y+i)*a[i] sum[y]−sum[i]+(x−y+i)∗a[i]。
由于查询的是整点,我们直接使用李超树维护下凸壳即可。
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;#define lson rt * 2
#define rson rt * 2 + 1typedef long long ll;void read(int &x) {x = 0; char c = getchar();while (c < '0' || c > '9') c = getchar();while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
}void write(int x) {if (x > 9) write(x / 10);putchar(x % 10 + '0');
}const int N = 1e5 + 100;struct node {int l, r, id;
}qu[N];bool operator < (node a, node b) {return a.r < b.r;
}int n, m;
int sa[N], sum[N], ans[N];int get(int i, int d) {if (i == 0) return 1e9;return -sum[i] + (i - d) * sa[i];
}int tree[N * 4];void insert(int id, int l, int r, int rt) {if (tree[rt] == 0) return void(tree[rt] = id);int m = (l + r) / 2;if (get(tree[rt], m) > get(id, m)) swap(tree[rt], id);if (l == r) return;if (get(tree[rt], r) > get(id, r)) insert(id, m + 1, r, rson);else insert(id, l, m, lson);
}void insert(int rl, int rr, int id, int l, int r, int rt) {if (rl == l && rr == r) return void(insert(id, l, r, rt));int m = (l + r) / 2;if (rr <= m) insert(rl, rr, id, l, m, lson);else if (m < rl) insert(rl, rr, id, m + 1, r, rson);else {insert(rl, m, id, l, m, lson);insert(m + 1, rr, id, m + 1, r, rson);}
}int query(int id, int l, int r, int rt) {if (l == r) return get(tree[rt], id);int m = (l + r) / 2;if (id <= m) return min(get(tree[rt], id), query(id, l, m, lson));else return min(get(tree[rt], id), query(id, m + 1, r, rson));
}int main() {//freopen("0.txt", "r", stdin);read(n);for (int i = 1; i <= n; i++) read(sa[i]), sum[i] = sum[i - 1] + sa[i];read(m);for (int i = 1; i <= m; i++) read(qu[i].l), read(qu[i].r), qu[i].id = i;sort(qu + 1, qu + m + 1);for (int i = 1, j = 1; i <= n && j <= m; i++) {insert(0, i, i, 0, n, 1);while (j <= m && qu[j].r == i) {ans[qu[j].id] = sum[i] + query(qu[j].r - qu[j].l, 0, n, 1);j++;}}for (int i = 1; i <= m; i++) write(ans[i]), puts("");return 0;
}
51nod1488 帕斯卡小三角形相关推荐
- CSS导航条菜单:带小三角形
很多网页的导航条都会有小三角形,其实实现这个功能也挺简单. 拿菜鸟教程首页导航做个例子 首先写一个大的div_nav,而"首页""菜鸟笔记""菜鸟工具 ...
- css伪类(before)实现小三角形
css伪类(before)实现小三角形 效果 代码 &::before {position: absolute;top: -6px;left: 38px;content: '';border- ...
- css实现带小三角形的边框
主要方法是使用伪元素before和after,之前已经总结过伪元素before.after用法,它们效果相当于在标签的内部放置一个最前或者最后的标签,添加的标签同样的能够继承父元素的属性,那么通过伪元 ...
- CSS中如何制作出小三角形?
css中制作小三角形思路(我是通过边框制作的): 先想好自己想设置方向朝哪边的三角形,这里我制作方向朝上的三角形(其他方向类似) 代码即思路如下: <!DOCTYPE html> < ...
- html实现小三角形
用html实现小三角形 完整代码如下: <!DOCTYPE html> <html><head><meta charset="utf-8" ...
- html css 科技感异形边框,CSS边框外的小三角形+阴影效果的实现。
...虽然是一个很小的问题,但其实还是挺实用的. 实现一个边框外的角. 用纯CSS来写. 一开始实现的效果是这个样子的. 但是这个效果没有办法给他附带阴影,所以换了一种写法.实现成了这个样子 想要实现 ...
- EXCEL表格中单元格的左上角的绿颜色小三角形怎么添加?怎么消除?
EXCEL表格中单元格的左上角绿颜色的小三角形: 因为EXCEL有个自动检查错误的功能,出现绿色小三角是在提示用户:这里的单元格和周围的单元格存储的形式不一样,一般周围的是用数据形式存储的而带上绿色小 ...
- android三角形切图软件,还在为小三角形切图?使用纯CSS写一个简单的三角形
同学们,当美工给的设计图是这样: 或者这样: 我的内心其实是拒绝的-_-:但工作还得干,大部分同学会写 .icon{width:20px;height:20px;display:block;margi ...
- 如何让 Xcode 在运行时问题(表示为紫色的小三角形)被发现时就立即中断以供调试
概览 在 App 调试运行中,小伙伴们可能突然会发现 Xcode 界面里多了不少紫色的小三角形图标: 这些是运行时问题(Runtime issues),表示 App 在实际运行中被发现的一些" ...
最新文章
- Java基础、多线程、JVM、集合八股文自述(持续更新)
- 剑指offer:滑动窗口最大值
- 判断一个路径串是否为有效目录
- Dynamics CRM 注册插件dll到GAC
- 2017年对口招生c语言及答案,2017年计算机专业对口考试试卷及答案.doc
- 手机计算机快速切换功能,群控系统快速切换多部手机
- 在开发IE插件时,遇到的各种问题记录
- C语言编程基础,手机购物程序的设计
- android textview html font标签不好用
- php唯美博客,24个很酷的PHP开源库
- 仅10天修复3个零日漏洞 苹果是真的拼了命
- hexo(sakura)给博客增添侧边栏(回到顶部,跳转评论,深色模式,播放音乐)Valine-1.4.4新版本尝鲜+个性制定(表情包、qq头像、UI样式)
- Map对象 map.get(key)
- HTTP必须知道的几种状态码
- pdfwin10闪退_windows10打开pdf文件3秒后秒退
- C#基于NAudio的声音识别(一)——录制与切割
- catia 斑马线分析_在CATIA中使用斑马线检查曲面光顺性的方法 | 坐倚北风
- addrow是什么意思java_如何在JTable中添加行?
- 汽车java歌曲_开车必备100首歌曲 2019车载歌曲 50首适合开车听的歌曲 车载必听...
- 倒排索引的理论和代码实现