【单调栈+倍增】[P7167 [eJOI2020 Day1] Fountain
【单调栈+倍增】[P7167 [eJOI2020 Day1] Fountain
思路
用单调栈处理每个圆盘溢出后流到的第一个位置,然后倍增优化。
代码
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
vector<array<i64, 2>> a(n + 1);
for (int i = 1; i <= n; i ++) {
cin >> a[i][0] >> a[i][1];
}
n ++;
a.push_back({INT_MAX, INT_MAX});
vector jump(n + 1, vector<int>(20));
vector sum(n + 1, vector<i64>(20, INT_MAX));
stack<int> st;
for (int i = 1; i <= n; i ++) {
while (st.size() && a[i][0] > a[st.top()][0]) {
auto t = st.top();
jump[t][0] = i;
sum[t][0] = a[t][1];
st.pop();
}
st.push(i);
}
for (int j = 1; (1 << j) <= n; j ++) {
for (int i = 1; i + (1 << j) <= n; i ++) {
jump[i][j] = jump[jump[i][j - 1]][j - 1];
sum[i][j] = sum[jump[i][j - 1]][j - 1] + sum[i][j - 1];
}
}
auto query = [&](int r, int v)->int{
for (int i = 18; i >= 0; i --) {
if (v > sum[r][i]) {
v -= sum[r][i];
r = jump[r][i];
}
}
return r % n;
};
while (m --) {
int r, v;
cin >> r >> v;
cout << query(r, v) << '\n';
}
return 0;
}
【单调栈+倍增】[P7167 [eJOI2020 Day1] Fountain的更多相关文章
- HDU - 5033 Building (单调栈+倍增)
题意:有一排建筑,每座建筑有一定的高度,宽度可以忽略,求在某点的平地上能看到天空的最大角度. 网上的做法基本都是离线的...其实这道题是可以在线做的. 对于向右能看到的最大角度,从右往左倍增维护每个时 ...
- Good Bye 2014 E - New Year Domino 单调栈+倍增
E - New Year Domino 思路:我用倍增写哒,离线可以不用倍增. #include<bits/stdc++.h> #define LL long long #define f ...
- 洛谷P7167 [eJOI 2020 Day1] Fountain (单调栈+ST)
开两个数组:to[i][j]表示从i这个位置向下的第2j个圆盘是哪个,f[i][j]表示流满从i这个位置向下的 2j 个圆盘需要多少体积的水. 详情见代码: 1 #include<bits/st ...
- 【bzoj3879】SvT 后缀数组+倍增RMQ+单调栈
题目描述 (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示), ...
- Lost My Music:倍增实现可持久化单调栈维护凸包
题目就是求树上每个节点的所有祖先中(ci-cj)/(dj-di)的最小值. 那么就是(ci-cj)/(di-dj)的最大值了. 对于每一个点,它的(ci,di)都是二维坐标系里的一个点 要求的就是祖先 ...
- 【BZOJ-3956】Count ST表 + 单调栈
3956: Count Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 173 Solved: 99[Submit][Status][Discuss] ...
- poj 3415 Common Substrings 后缀数组+单调栈
题目链接 题意:求解两个字符串长度 大于等于k的所有相同子串对有多少个,子串可以相同,只要位置不同即可:两个字符串的长度不超过1e5; 如 s1 = "xx" 和 s2 = &qu ...
- poj 3415 Common Substrings(后缀数组+单调栈)
http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K Total Sub ...
- 差异:后缀数组(wzz模板理解),单调栈
因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
随机推荐
- Ubuntu禁止和启动内核更新
ubuntu禁止和启动内核更新 https://www.cnblogs.com/passedbylove/p/13091002.html https://www.cnblogs.com/sparkde ...
- 高通Android UEFI中的LCD分析(2):关键的函数
# 高通Android UEFI中的LCD分析(2):关键的函数 背景 在启动流程分析中,看到了几个经常出现的函数,这里实际分析一下有关的实现.以搞清楚高通做了什么,以及我们能做什么. 重要函数 MD ...
- UF_MB_ask_button_id 测试
# tesy UF_MB_ask_button_id import NXOpen import NXOpen_UF as nuf def main(): ses = NXOpen.Session.Ge ...
- P5327 题解
考虑把贡献摊到每个点上计算,每个点带来的贡献实际上是经过它的路径并大小,算完求和之后在除以 \(2\) 就得到了答案. 考虑怎么计算路径并大小. 考虑这样一个办法,将所有路径的起始点和终点按照 DFS ...
- test20230824总结
A 怎么是重构树板子,放在图上都是水题. B 考场上只打了一个暴力,赛后发现似乎是很可做的 C 是一个考察状态设计的 dp 以后要多刷 D 是一道数据结构优化 dp 考场上写出来了却因为空间问题挂了 ...
- Java 面向对象编程之接口
什么是接口? 是抽象方法的集合,接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法 语法 interface 名称 [extends 其他的接⼝名] { // 声明 ...
- Pypi配置API Token
技术背景 在许久之前写的一篇博客中,我们介绍过使用twine向pypi上传我们自己的开源包的方法.最近发现这个方法已经不再支持了(报错信息如下所示),现在最新版需要使用API Token进行文件上传, ...
- Linux-makefile命令后面的-j4 -j8是什么意思?
其实是指在编译指定的文件时用多少个线程进行编程的意思~ 相关命令示例如下: make zImage -j8 make modules -j8 --------------------------- m ...
- web259(超详细)
SoapClient看完之后还不是很懂的话就可以去下面的两个网址去补充一下 SoapClient 是 PHP 中用于与 SOAP(Simple Object Access Protocol)服务进行通 ...
- [oeasy]python0070_动态类型_静态类型_编译_运行_匈牙利命名法
动态类型_静态类型 回忆上次内容 上次了解了 帮助文档的 生成 开头的三引号注释 可以生成 帮助文档 文档 可以写成网页 python3 本身 也有 在线的帮助手册 目前的程序 提高了 可 ...