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. c语言if语句是如何变成汇编代码的?

    1. 要编译的测试代码: int a; int b = 3; int main(void) { if (3) a = 4; else b = 5; } 2. 词法分析 词法分析将c源代码解析成一个个的 ...

  2. spring rest小马哥

    幂等 PUT 初始状态:0 修改状态:1 * N 最终状态:1 DELETE 初始状态:1 修改状态:0 * N 最终状态:0 非幂等 POST 初始状态:1 修改状态:1 + 1 =2 N次修改: ...

  3. Python实战:截图识别文字,过万使用量版本!(附源码!!)

    前人栽树后人乘凉,以不造轮子为由 使用百度的图片识字功能,实现了一个上万次使用量的脚本. 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1. ...

  4. jenkins原理简析

    持续集成Continuous Integration(CI) 原理图: Gitlab作为git server.Gitlab的功能和Github差不多,但是是开源的,可以用来搭建私有git server ...

  5. 自定义char类型字符,django中事务

    自定义char类型字符 # 自定义char类型,继承Field父类 class MyCharField(Field): def __init__(self, max_length, *args, ** ...

  6. Redis的六种特性 场景

    Redis的六种特性 l Strings l Hashs l Lists l Sets l Sorted Sets l Pub/Sub Redis各特性的应用场景 Strings Strings 数据 ...

  7. 以DevExpress开发的WinFrom程序的多语言功能的实现

    以DevExpress开发的WinFrom程序的多语言功能的实现 写在前面: 多语言切换功能在Winform程序中是经常遇到的需求,尤其是需要给国外客户使用的情况下,多语言功能是必不可少的.前一段时间 ...

  8. IDEA中对代码进行测试

    一. 建立对应得目录 二.导入junit依赖 <dependency> <groupId>junit</groupId> <artifactId>jun ...

  9. CAS你知道吗

    1.比较并交换 CASDemo /** * CAS => compareAndSet * 比较并交换 */ public class CASDemo { public static void m ...

  10. 基本类型、引用类型NPE异常

    1.null是Java中的关键字,像public.static.final.它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错. 2.就像每种原始类型都有默认值一样 ...