Content

对一个栈执行如下操作:

  • 1 l r:依次向栈里面弹入 \(l,l+1,\dots,r-1,r\)。
  • 2 k:依次从栈里面弹出 \(k\) 个数,并求出所有弹出的数的和。

数据范围:\(1\leqslant n\leqslant 10^5\),\(0\leqslant l\leqslant r\leqslant 10^6\),\(1\leqslant k\leqslant 10^{12}\)。

Solution

显然,一个一个去暴力弹入弹出显然是不现实的。那么怎么办?一段一段去弹入弹出即可。

首先对于操作 \(1\),我们直接把 \([l,r]\) 这一段当做一个元素直接弹入栈里面即可。

关键在于操作 \(2\),首先不难发现对于 \([l,r]\) 这一整段,其含有的数的个数为 \(r-l+1\),和为 \(\frac{(l+r)(r-l+1)}2\)。因此,对于能够取出的整段,我们直接暴力不断取出,直到 \(k\) 不够取出整段为止。

那么取完整段之后如果 \(k\) 不为 \(0\) 呢?我们考虑把原来的一段取出并拆成两段:一段是 \([l,r-k+1]\),另一段是 \([r-k+1,r]\)。我们要取出来的就是 \([r-k+1,r]\) 这一段,并且不难求出这一段的和为 \(\frac{(2r-k+1)k}2\)。把右半段取出,统计入总和并把左半段作为一个新的整段弹入栈里面就好了。

那么这道题目就做完了,具体实现可以手写栈也可以直接用 stl 中的 stack 容器。

Code

为了偷懒直接 #define int ll 了(

namespace Solution {
#define int ll
struct node {int l, r;};
stack<node> q; iv Main() {
MT {
int op, x, y; read(op);
if(op == 1) read(x, y), q.push((node){x, y});
else {
read(x);
ll ans = 0;
while(!q.empty() && x >= (q.top().r - q.top().l + 1)) x -= q.top().r - q.top().l + 1, ans += 1ll * (q.top().l + q.top().r) * (q.top().r - q.top().l + 1) / 2, q.pop();
if(x) {
node cur = q.top(); q.pop();
ans += 1ll * (cur.r - x + 1 + cur.r) * x / 2;
cur.r -= x, q.push(cur);
}
write(ans), puts("");
}
}
return;
}
#undef int
}

LuoguP7870 「Wdoi-4」兔已着陆 题解的更多相关文章

  1. 「POJ 3666」Making the Grade 题解(两种做法)

    0前言 感谢yxy童鞋的dp及暴力做法! 1 算法标签 优先队列.dp动态规划+滚动数组优化 2 题目难度 提高/提高+ CF rating:2300 3 题面 「POJ 3666」Making th ...

  2. 「最强」Lettuce 已支持 Redis6 客户端缓存

    Redis 客户端缓存 缓存的解决方案一般有两种: [L1] 内存缓存(如 Caffeine.Ehcache) -- 速度快,进程内可用,但重启缓存丢失,出现缓存雪崩的问题. [L2]集中式缓存(如 ...

  3. NBL小可爱纪念赛「 第一弹 」 游记(部分题解)

    比赛链接 洛谷:禁止含有侮辱性质的比赛 . ??? 反正我觉得,gyx挺危险的 不说废话. 首先,比赛经验,前几个小时不打,跟着刷榜. 一看 T1. 发现是道水题,直接切掉了. 然后看到了 T2. 感 ...

  4. LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)

    写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...

  5. LOJ #2538. 「PKUWC 2018」Slay the Spire (期望dp)

    Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spi ...

  6. 「SAP技术」已启用质检物料创建PO时候'STOCK TYPE'没有默认为X?

    「SAP技术」 SAP MM 已启用质检物料创建PO时候'STOCK TYPE'没有默认为X? Part I:SAP 标准行为 1, 物料11002335, QM视图里 01 inspection t ...

  7. 「 洛谷 」P4539 [SCOI2006]zh_tree

    小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...

  8. Note -「Lagrange 插值」学习笔记

    目录 问题引入 思考 Lagrange 插值法 插值过程 代码实现 实际应用 「洛谷 P4781」「模板」拉格朗日插值 「洛谷 P4463」calc 题意简述 数据规模 Solution Step 1 ...

  9. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

随机推荐

  1. html+css第四篇

    浮动 float浮动: 1.块在一排显示 2.内联支持宽高 3.默认内容撑开宽度 4.脱离文档流 5.提升层级半层 float:left | right | none | inherit; 文档流是文 ...

  2. [IIS]文件夹权限

    发布完iis,默认的 Application Pool 没有权限访问文件夹. 可以给项目文件夹添加用户权限. 右键 - "属性" - "安全" - " ...

  3. C/C++ Qt TableDelegate 自定义代理组件

    TableDelegate 自定义代理组件的主要作用是对原有表格进行调整,例如默认情况下Table中的缺省代理就是一个编辑框,我们只能够在编辑框内输入数据,而有时我们想选择数据而不是输入,此时就需要重 ...

  4. 『学了就忘』Linux文件系统管理 — 59、使用fdisk命令进行手工分区

    目录 1.手工分区前提 (1)要有一块新的硬盘 (2)在虚拟机中添加一块新硬盘 2.手工分区 (1)查看Linux系统所有硬盘及分区 (2)手工分区:详细步骤 (3)保存手工分区 3.硬盘格式化 4. ...

  5. Codeforces 1365G - Secure Password(思维题)

    Codeforces 题面传送门 & 洛谷题面传送门 首先考虑一个询问 \(20\) 次的方案,考虑每一位,一遍询问求出下标的这一位上为 \(0\) 的位置上值的 bitwise or,再一遍 ...

  6. Nginx 编译 echo 模块

    Nginx  编译 echo 模块 echo模块下载地址:https://github.com/openresty/echo-nginx-module 查看nginx已经编译的模块, nginx -V ...

  7. UE4类型数据自动注册

    Version:4.26.2 UE4 C++工程名:MyProject 在<宏GENERATED_BODY做了什么?>中,简单分析了GENERATED_BODY宏给一个简单的.继承自UOb ...

  8. 巩固java第七天

    巩固内容: HTML 属性 属性是 HTML 元素提供的附加信息. HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 属性一般描述于开始标签 属性总是以名称/值对的形式出现,比 ...

  9. 日常Java 2021/9/21

    将Java数组中的元素前后反转.题目要求:已知一个数组arr = {11,12,13,14,15}用程序实现把该数组中的元素值交换,交换后的数组arr = { 15,14,13,12,11},并输出交 ...

  10. linux下的C++多线程

    原文链接:http://blog.csdn.net/lee1054908698/article/details/54633056 本随笔作为多线程笔记使用,内容完全照搬原博 多线程是多任务处理的一种特 ...