【单调栈+倍增】[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的更多相关文章

  1. HDU - 5033 Building (单调栈+倍增)

    题意:有一排建筑,每座建筑有一定的高度,宽度可以忽略,求在某点的平地上能看到天空的最大角度. 网上的做法基本都是离线的...其实这道题是可以在线做的. 对于向右能看到的最大角度,从右往左倍增维护每个时 ...

  2. Good Bye 2014 E - New Year Domino 单调栈+倍增

    E - New Year Domino 思路:我用倍增写哒,离线可以不用倍增. #include<bits/stdc++.h> #define LL long long #define f ...

  3. 洛谷P7167 [eJOI 2020 Day1] Fountain (单调栈+ST)

    开两个数组:to[i][j]表示从i这个位置向下的第2j个圆盘是哪个,f[i][j]表示流满从i这个位置向下的 2j 个圆盘需要多少体积的水. 详情见代码: 1 #include<bits/st ...

  4. 【bzoj3879】SvT 后缀数组+倍增RMQ+单调栈

    题目描述 (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示), ...

  5. Lost My Music:倍增实现可持久化单调栈维护凸包

    题目就是求树上每个节点的所有祖先中(ci-cj)/(dj-di)的最小值. 那么就是(ci-cj)/(di-dj)的最大值了. 对于每一个点,它的(ci,di)都是二维坐标系里的一个点 要求的就是祖先 ...

  6. 【BZOJ-3956】Count ST表 + 单调栈

    3956: Count Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 99[Submit][Status][Discuss] ...

  7. poj 3415 Common Substrings 后缀数组+单调栈

    题目链接 题意:求解两个字符串长度 大于等于k的所有相同子串对有多少个,子串可以相同,只要位置不同即可:两个字符串的长度不超过1e5; 如 s1 = "xx" 和 s2 = &qu ...

  8. poj 3415 Common Substrings(后缀数组+单调栈)

    http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Sub ...

  9. 差异:后缀数组(wzz模板理解),单调栈

    因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...

  10. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

随机推荐

  1. Mysql 聚合函数嵌套使用

    Mysql 聚合函数嵌套使用 目的:Mysql 聚合函数嵌套使用 聚合函数不可以直接嵌套使用,比如: max(count(*)) 思路:但是可以嵌套子查询使用(先分组取出count值, 再将count ...

  2. MySQL日志(redo log、binlog)刷盘策略

    通过上篇文章,我们知道MySQL是采用两段提交策略来保证事务的原子性的,redo log刷盘的时机是在事务提交的commit阶段采取刷盘的,在此之前,redo log都存在于redo log buff ...

  3. 化腐朽为神奇!揭开ISP图像处理的神秘面纱,基于瑞芯微RK3568J工业平台!

    ISP图像处理前后图像对比 化腐朽为神奇!经过ISP图像处理的图片前后对比是如此惊人!从下图中可以观察到,未经处理的原始图像偏绿且暗淡,而经ISP图像处理的图像能够清晰地还原现场真实的颜色细节! 图1 ...

  4. 在OwinSelfHost项目中获取客户端IP地址

    在OwinSelfHost项目中,获取客户端的IP地址可以通过以下方法获得: base.Request.GetOwinContext().Request.RemoteIpAddress 创建一个Owi ...

  5. 在windows双系统中,nginx配置虚拟域名

    比如在ubuntu系统中,nginx配置了域名www.abc.com, 那么需要在终端 sudo vim /etc/hosts文件中配置域名,如下: 127.0.0.1 www.abc.com 即可访 ...

  6. [oeasy]python0012_程序写错了怎么办

    运行python文件_报错处理_NameError 回忆上次内容 回忆 上次内容 vi oeasy.py 用 vi 编辑 oeasy.py   cat oeasy.py 用 cat 查看 oeasy. ...

  7. 题解:P10723 [GESP202406 七级] 黑白翻转

    背景 汗流浃背了. 分析 容易想到一个显然的思路:以任意节点为根,开始遍历.如果一个节点的子树里面有黑点,那么它必须保留,否则如果它是白点,则可以删去. 但这个方法很容易举出反例: 在这颗树中,如果以 ...

  8. CRC 循环冗余效验

    CRC循环冗余效验 利用多项式 x6 + x4 + x3,实际为使用模2除法来做的加密 常用crc多项式有 名称 生成多项式 数值式 简记式 标准引用 CRC-4 x4+x+1 0x1'3 0x3 I ...

  9. JDK安装教程(Windows)

    Windows 端: 1. 安装 首先进入官网:https://www.oracle.com/java/technologies/javase-downloads.html 因为我已经安装了 JDK8 ...

  10. Known框架实战演练——进销存财务管理

    本文介绍如何实现进销存管理系统的财务对账模块,财务对账模块包括供应商对账和客户对账2个菜单页面.供应商和客户对账字段相同,因此可共用一个页面组件类. 项目代码:JxcLite 开源地址: https: ...