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

[JSOI2008] 最大数 题解 线段树

[JSOI2008] 最大数

传送门

题目描述

现在请求你维护一个数列,要求提供以下两种操作:

  1. 查询操作。

语法:Q L

功能:查询当前数列中末尾 L L L 个数中的最大的数,并输出这个数的值。

限制: L L L 不超过当前数列的长度。 ( L > 0 ) (L > 0) (L>0)

  1. 插入操作。

语法:A n

功能:将 n n n 加上 t t t,其中 t t t 是最近一次查询操作的答案(如果还未执行过查询操作,则 t = 0 t=0 t=0),并将所得结果对一个固定的常数 D D D 取模,将所得答案插入到数列的末尾。

限制: n n n 是整数(可能为负数)并且在长整范围内。

注意:初始时数列是空的,没有一个数。

输入格式

第一行两个整数, M M M D D D,其中 M M M 表示操作的个数, D D D 如上文中所述。

接下来的 M M M 行,每行一个字符串,描述一个具体的操作。语法如上文所述。

输出格式

对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。

样例 #1

样例输入 #1

5 100
A 96
Q 1
A 97
Q 1
Q 2

样例输出 #1

96
93
96

提示

数据规模与约定

对于全部的测试点,保证 1 ≤ M ≤ 2 × 1 0 5 1 \leq M \leq 2 \times 10^5 1M2×105 1 ≤ D ≤ 2 × 1 0 9 1 \leq D \leq 2 \times 10^9 1D2×109

注明

以上来自洛谷 以上来自洛谷 以上来自洛谷

解题思路

前置知识:

  • 并查集。
  • 队列。

正文

将一个数插入单调队列时,可以将被删除的数的父亲标记为插入的数,在查找时只要找到查找的数的根,此时根上的数值即为答案。时间复杂度: O ( n ) O(n) O(n)

具体题解 如下。(这里有一个梗,猜猜是啥)

AC Code

#include<bits/stdc++.h>
using namespace std;
char buf[1048576], *p1, *p2;
template<typename T>inline void Quick_Write(T x) {if (x < 0) putchar('-'), x = -x;if (x > 9) Quick_Write(x / 10);putchar(x % 10 + '0');return;
}
struct node {long long x;int y;
} Arry[200005];
int m;
long long d, x;
int Total, Length_Count, f[200005];
long long Temp, T[200005];
char ch[3];
inline int Find(int x) {if (x != f[x]) f[x] = Find(f[x]);return f[x];
}
signed main() {scanf("%d%lld", &m, &d);for (register int i = 1; i <= m; ++i) {getchar(), scanf("%s", ch), scanf("%lld", &x);if (ch[0] == 'A') {x += Temp, x %= d, ++Total, T[Total] = x, f[Total] = Total;while (x > Arry[Length_Count].x && Length_Count) f[Arry[Length_Count].y] = Total, Length_Count--;Arry[++Length_Count].x = x, Arry[Length_Count].y = Total;} else {x = Total - x + 1;int y = Find(x);Temp = T[y], Quick_Write(Temp), puts("");}}return 0;
}
http://www.lryc.cn/news/310696.html

相关文章:

  • python爬虫之app爬取-charles的使用
  • 神经网络结构——CNN、RNN、LSTM、Transformer !!
  • mysql 事务的隔离级别
  • Unity3D 阴影的计算原理详解
  • 【物联网应用案例】从0到N,智慧农业的数据价值
  • 文生视频基础1:sora技术报告学习
  • Linux第68步_旧字符设备驱动的一般模板
  • 23种设计模式——工厂方法模式
  • 水豚鼠标助手 强大的鼠标美化工具
  • ArrayList集合源码分析
  • 循环队列与循环双端队列
  • https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
  • (C语言)qsort函数模拟实现
  • WordPress建站入门教程:如何在本地电脑搭建WordPress网站?
  • Vue3教程
  • Linux系统Docker部署RStudio Server
  • 【C++】每周一题——2024.3.3(手滑再再写一篇)
  • TabLayout与ToolBar、ViewPager的使用
  • 链表基础知识详解(非常详细简单易懂)
  • SAP PP学习笔记05 - BOM配置(Customize)1 - 修正参数
  • 前端从普通登录到单点登录(SSO)
  • 考研总计划(基础篇)
  • 力扣周赛387
  • 部署PhotoMaker通过堆叠 ID 嵌入自定义逼真的人物照片
  • 挑战杯 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  • 关于RSA公私钥加密报错Data must not be longer than 117 bytes问题解决办法
  • 【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
  • Android 开发环境搭建的步骤
  • 六、继承(一)
  • 数字化转型导师鹏:政府数字化转型政务服务类案例研究