当前位置: 首页 > news >正文

数据结构:栈(区间问题)

码蹄集OJ-小码哥的栈

#include<bits/stdc++.h> 
using namespace std;
#define int long long
const int N=1e6+7;
struct MOOE
{int ll,rr;
};
stack<MOOE>st;
signed main( )
{ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin>>n;while(n--){int opt;cin>>opt;if(opt==1){int l,r;cin>>l>>r;st.push({l,r});}if(opt==2){int k;cin>>k;int result=0;while(k){int l=st.top().ll;int r=st.top().rr;int size=r-l+1;if(k<size){result+=(2*r-k+1)*k/2;st.pop();st.push({l,r-k});k=0;}else{result+=(l+r)*size/2;k-=size;st.pop();}}        cout<<result<<endl;}}return 0;
}

定义一个结构体MOOD变量,含有ll与rr两个成员。定义一个st栈保存节点(栈内节点可以是一个数也可以是一个范围),每次 push({l, r}) 就是把一个 MOOE 对象压栈,也就是栈内的每个节点都有两个成员。

当输入的opt为1时,将范围作为节点压入栈中。

当输入的opt为2时,要考虑k的两种情况:一种可能小于栈顶范围,一种大于栈顶范围。如果小于栈顶范围,通过等差数列求和公式得出结果;当大于栈顶范围时,只要将栈顶范围的和求出后,再pop出后,反复多次还会回到第一种情况中。在两种条件外套上大循环,当是第一种情况,循环停止,第二种情况时,将k减去pop出的节点的大小,再进入循环。

http://www.lryc.cn/news/590046.html

相关文章:

  • 颠覆NLP十年范式!OpenCSG中文数据集助推CMU无分词器模型登顶SOTA
  • Kubernetes使用kubeadm安装详细步骤
  • Java基础:分支/循环/数组
  • Django基础(三)———模板
  • OpenSearch SQL 查询完整指南
  • django在线音乐数据采集-22647
  • 职业发展:把工作“玩”成一场“自我升级”的游戏
  • OpenCV直线段检测算法类cv::line_descriptor::LSDDetector
  • WPF 导入自定义字体并实现按钮悬停高亮效果
  • 红黑树、B树、B+树
  • 计算机网络:(九)网络层(下)超详细讲解互联网的路由选择协议、IPV6与IP多播
  • 汽车数字化——65页大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)战略规划【附全文阅读】
  • 怎么用快鲸aiseo提升百度搜索排名?
  • 如何区分Bug是前端问题还是后端问题?
  • Linux 驱动中 Timer / Tasklet / Workqueue 的作用与对比
  • [特殊字符] CentOS 7 离线安装 MySQL 5.7 实验
  • 【Linux】基本指令详解(二) 输入\输出重定向、一切皆文件、认识管道、man、cp、mv、echo、cat
  • VirtualBox 中 CentOS 7 双网卡配置静态 IP
  • C++ - 仿 RabbitMQ 实现消息队列--sqlite与gtest快速上手
  • Spring Boot 项目中数据同步之binlog和MQ
  • C++修炼:IO流
  • 有哪些好用的原型设计软件?墨刀、Axure等测评对比
  • AI产品经理面试宝典第25天:AI+机器人产品设计与技术落地面试题与答法
  • 使用 bat 批量创建带有项目前缀名的文件夹结构
  • 人工智能与机器人研究|深孔内表面缺陷特征内窥测量方法研究
  • Netty介绍和基本代码演示
  • 清理C盘方法
  • PyTorch中张量(TensorFlow)操作方法和属性汇总详解和代码示例
  • Postman接口
  • 【开源.NET】一个 .NET 开源美观、灵活易用、功能强大的图表库