1012: [JSOI2008]最大数maxnumber
时间:2022-05-07
本文章向大家介绍1012: [JSOI2008]最大数maxnumber,主要内容包括1012: [JSOI2008]最大数maxnumber、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1012: [JSOI2008]最大数maxnumber
Time Limit: 3 Sec Memory Limit: 162 MB
Submit: 4435 Solved: 2000
Description
现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。
Input
第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足(0
Output
对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
Sample Input
5 100 A 96 Q 1 A 97 Q 1 Q 2
Sample Output
96 93 96
HINT
Source
题解:额。。这个。。。网上说了好多高端的算法(HansBug:说是线段树嘛,可是怎么加点进去;单调队列嘛,麻烦;树状数组区间最值嘛,不会写 phile:我也是醉了)然后我就想到了《算法导论》上面那个用于静态快速求区间最值的RMQ(可以做到O(nlogn)初始化,O(1)查询),而且这道题要求的是会不停的在序列末尾追加数字,这样子会发现原来的RMQ算法可以加上一个追加数字操作(这算是我自创的么呵呵呵)——当加上新数字后,对于每一级的一维数组都只需要再在后面追加一格就是了,每一级的追加可以类比原有的查询操作。。。然后可以做到修改时O(logn),求值时O(1),总复杂度为O(nlogn+n),n<=200000,看样子有点危险,可是一测还是Accept了。。。
1 const lx=200000;ly=trunc(ln(lx)/ln(2))+1;
2 var
3 i,j,k,l,m,n,p,t:longint;
4 a:array[0..ly,0..lx] of longint;
5 c1:char;
6 function max(x,y:longint):longint;
7 begin
8 if x>y then max:=x else max:=y;
9 end;
10 procedure add(x:longint);
11 var i,j,k:longint;
12 begin
13 x:=x mod p;
14 a[0,m+1]:=x;
15 for i:=1 to ly do
16 begin
17 j:=m-trunc(exp(i*ln(2)))+2;
18 if j<1 then break;
19 k:=j+trunc(exp((i-1)*ln(2)));
20 a[i,j]:=max(a[i-1,j],a[i-1,k]);
21 end;
22 inc(m);
23 end;
24 function last(x:longint):longint;
25 var i:longint;
26 begin
27 if x>m then exit(last(m));
28 i:=trunc(ln(x)/ln(2));
29 last:=max(a[i,m-x+1],a[i,m-trunc(exp(i*ln(2)))+1]);
30 end;
31 begin
32 readln(n,p);
33 m:=0;
34 for i:=1 to n do
35 begin
36 readln(c1,l);
37 case upcase(c1) of
38 'A':add(l+t);
39 'Q':begin
40 t:=last(l);
41 writeln(t);
42 end;
43 end;
44 end;
45 end.
46
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
- Golang语言社区--【基础知识】循环
- Spring Cloud构建微服务架构:消息驱动的微服务(消费组)【Dalston版】
- Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】
- Spring Boot中使用LDAP来统一管理用户信息
- 使用Swagger2Markup实现API文档的静态部署(一):AsciiDoc
- 使用Swagger2Markup实现API文档的静态部署(二):Markdown和Confluence
- Dubbo官方的Starter发布1.0.0测试版,与Spring Boot的结合将更加自然
- spring-boot-starter-swagger 1.2.0.RELEASE:新增分组配置功能
- 领域驱动设计
- Spring Boot中使用JavaMailSender发送邮件
- Spring Boot的应用限流
- Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】
- 虚拟机类加载机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如果串口驱动有问题,怎么调
- linux程序安装及包管理
- Mysql存储引擎
- CentOS7-samba文件共享服务
- centos7-vsftpd文件服务器
- Mysql的逻辑架构
- centos7-httpd服务器
- Linux文件 目录与权限
- 简易数据分析(三):Web Scraper 批量抓取豆瓣数据与导入已有爬虫
- 嵌入式Linux开发环境搭建 配置Ubuntu
- 简易数据分析(五):Web Scraper 翻页、自动控制抓取数量 & 父子选择器
- 【深度】韦东山:一文看看尽linux对中断处理的前世今生
- 嵌入式开发之交叉编译程序万能命令_以freetype为例
- Python-EEG处理和事件相关电位(ERP)
- 嵌入式Linux开发 配置网络