l洛谷 P7870 兔已着陆——题解

news/2024/11/14 14:47:51/文章来源:https://www.cnblogs.com/qc0817/p/18353878

洛谷P7870题解


传送锚点


摸鱼环节

「Wdoi-4」兔已着陆

题目背景

铃瑚和清兰是从月之都到达幻想乡的两只月兔。正因为降落到了幻想乡进行调查,因此她们通过开团子屋制作团子出售的方式,在幻想乡生活。

为了应对越发繁荣的市场,她们向河城荷取购置了一台团子机器,可以高效地生产出五颜六色的团子。不同颜色的团子的售价不尽相同。由于每天顾客数量很多,购买的团子数量也不少,所以清兰总是搞不清楚一大堆团子的售价如何。

清兰找到了你,希望你能告诉她每次售出团子时,这些团子的总价格。

题目描述

清兰使用河童的机器可以生产出各种各样颜色的团子。她发现,对于颜色为 \(\bm c\) 的团子,它的售价为 \(\bm c\)。同时,团子机器有个特性,那就是生产出来的团子的颜色必然是一段连续的整数。

为了储存已经生产出来的团子,清兰使用了一种类似于「栈」的结构。在一天的开始,这个栈为空栈。现在有 \(n\) 次操作,分为两种:

  1. \(\colorbox{f0f0f0}{\verb!1 l r!}\) :团子机器生产出来了颜色为 \(l,l+1,\cdots r-1,r\) 的团子。清兰将这些团子依次入栈。也就是在栈顶依次加入 \(l,l+1,l+2,\cdots r-1,r\)
  2. \(\colorbox{f0f0f0}{\verb!2 k!}\) :有一位客人想要购买 \(k\) 个团子。此时清兰会依次从栈顶取出 \(k\) 个团子并售出。保证 \(k\) 不大于当前栈内的团子个数。

你要做的,就是对于每个操作 \(2\) 输出这些团子的总价格。

输入格式

第一行有一个整数 \(n\),表示操作的个数。
接下来 \(n\) 行描述一组询问。第一个整数 \(op\) 表示询问的种类,若为 \(1\) 则为操作 \(1\),为 \(2\) 则为操作 \(2\)

  • 对于操作 \(1\),接下来有两个整数 \(l,r\),含义如题面所示。
  • 对于操作 \(2\),接下来有一个整数 \(k\),含义如题面所示。

输出格式

若干行。对于每次操作 \(2\),输出这些团子的售价之和。

样例 #1

样例输入 #1

6
1 1 14
2 5
1 14 19
1 1 9
2 8
2 10

样例输出 #1

60
44
124

提示

样例 \(2\) 见下发的附件 \(\textbf{\textit{stack2.in}/\textit{stack2.out}}\)


数据范围

  • 对于前 \(30\%\) 的数据,\(n,l,r\le100\)
  • 对于另外 \(20\%\) 的数据,\(l=r\)
  • 对于另外 \(20\%\) 的数据,\(k\le 10\)
  • 对于 \(100\%\) 的数据,\(1\le n\le 5\times 10^5\)\(0\le l\le r \le 10^6\)\(1\le k \le 10^{12}\)

窝又来水题解了最近比较懒,于是还是日更一篇8。这道题有效得训练了我们圈钱处理有序大数据的新方法。


正片开始

一眼数据范围,很明显不能直接暴力塞。但是呢,咱可以发现这些有序的团子可以用公式直接计算出,即\(ans=\frac{(l+r)(r-l+1)}{2}\),so只需要维护个团子段的左右端点即可。

操作一,
code:

cin>>l>>r;
s[cnt++]=make_pair(l,r);

操作二,
code:

cnt--;
cin>>k;
while(k)
{if(s[cnt].second-s[cnt].first+1>k){ans+=(s[cnt].second*2-k+1)*k/2;s[cnt].second-=k;//新右端点k=0;}else{ans+=(s[cnt].first+s[cnt].second)*(s[cnt].second-s[cnt].first+1)/2;k-=(s[cnt].second-s[cnt].first+1);cnt--;}
}
cout<<ans<<endl;
cnt++;

注意数据大小,需要开\(long\) \(long\)

十年OI一场空,不开\(long\) \(long\)见祖宗。


完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e6+5,mod=1e9+7;
int n,cnt=1;
pair<ll,ll>s[N];
int main()
{cin>>n;{for(int i=1;i<=n;i++){ll ans=0,k=0;int op,l,r;cin>>op;if(op==1){cin>>l>>r;s[cnt++]=make_pair(l,r);}else{cnt--;cin>>k;while(k){if(s[cnt].second-s[cnt].first+1>k){ans+=(s[cnt].second*2-k+1)*k/2;s[cnt].second-=k;k=0;}else{ans+=(s[cnt].first+s[cnt].second)*(s[cnt].second-s[cnt].first+1)/2;k-=(s[cnt].second-s[cnt].first+1);cnt--;}}cout<<ans<<endl;cnt++;}}}return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/781414.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

038.Vue3入门,使用keep-alive让组件保持存活

1、App.vue代码如下:<template><button @click="change">切换组件</button><p></p><keep-alive><component :is="tabComponent"></component></keep-alive> </template><script> impo…

铂繁达:如何提升自身能力以更好开展互联网项目

互联网上有很多副业项目可供选择,但为何有些人无法从中获利呢?关键在于执行力,且不同的在线机遇往往需要不同的技能和知识储备。在挑选和选择这些机会时,我们应当首先确保自己拥有所需的技能或具备学习与提升这些技能的意愿。现下大家对副业的需求越来越大。确实,互联网上…

037.Vue3入门,动态组件

1、App.vue代码如下:<template><component :is="tabComponent"></component><button @click="change">切换组件</button> </template><script> import Child1 from "./view/Child1.vue" import Chil…

排列组合:公式及推导

组合数学入门排列组合:公式及推导 引入 定义: 排列:从指定个数的元素中取出指定个数的元素进行排序;(考虑元素的顺序) 组合:从给定个数的元素中仅仅取出指定个数的元素;(不考虑元素的顺序) 加法&乘法原理 加法原理: 完成一个工程可以有 \(n\) 类办法, \(a_i(i\in[1…

USB协议详解第5讲(USB描述符-接口描述符)

1.USB描述符 USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB接口描述符的组成。 2.接口描述符组成 前面讲了设备描述符和标准配置描述符,本篇我们讲解接口描述符。首先要明确…

RabbitMQ Web管理界面简介

Overview TotalsQueued messagesReadyNumber of messages that are avaliable to be delivered now.待消费的消息数量 一般来说,如果队列中ready状态的消息数量比较多,则说明消费者的处理能力可能不足,可以考虑适当增加消费者UnackedNumber of messages for which the serve…

并发修改异常 ConcurrentModificationException详解

并发修改异常 ConcurrentModificationException详解异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。异常抛出在ArrayList类中的checkForComodification()方法中。checkForComodification()方法实际上就是当modCo…

2024暑假集训测试21

前言比赛链接。T1 写得和正解差不多但少了个细节炸 long long 了;T2 只会 \(n^3\) 的本来只有 \(50pts\),但考虑出题人大概率会搞一个 \(n\) 越大 \(T\) 越小,所以对于 \(n\) 很大的直接 \(rand\) 正确率还是有的,所以获得了 \(80pts\);T3 不会;T4 没有和 \(n\) 取 \(\m…

线性整数规划的三道经典例题

目录一、背包问题1.模型建立2.代码实现二、指派问题1.模型建立2.代码实现(1)输入目标函数系数(2)输入不等式约束(3)输入等式约束(4)调用函数求解三、钢管切割问题1.问题分析2.模型建立(1)利用枚举法找到料头小于等于0.9的切割方法(2)得到目标函数与约束3.代码实现(…

qt 设计界面中 scrollarea等子控件内部widget布局方法

默认这个右键布局里的选项为灰色,点不了,可以先往widget中拖一个按钮进去,然后再右键布局,然后再把按钮删掉,就相当于在设计界面 就设置好布局了

DataWhale-2024夏令营第四期-从零入门AI生图原理实践-学习笔记

DataWhale-2024夏令营第四期-从零入门AI生图原理&实践-学习笔记 Datawhale (linklearner.com)学习链接 AI生图基础知识 一、文生图(Text-to-Image Generation)历史随着深度学习的发展,近些年来越来越多的AI生图效果通过大语言模型得到了一定的提升。文生图的历史:文生图的…

036.Vue3入门,组件的生命周期

1、App.vue代码如下:<template><div><h3>主页面</h3><button @click="change">改变</button></div> </template><script> export default {beforeCreate() { console.log(beforeCreate) },created() { conso…