题目描述

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

1、 查询操作。

语法:Q L

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

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

2、 插入操作。

语法:A n

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

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

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

输入输出格式

输入格式:

第一行两个整数, M 和 D ,其中 M 表示操作的个数 (M≤200,000), D 如上文中所述,满足 (0<D<2,000,000,000)

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

输出格式:

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

思路:

从这道题的数据范围来看,他只有200000次操作

从最坏情况来看,数列长最多只可能200000

所以,这道题就变成了一道简单的线段树

我们默认这是一棵已经开好的大小为200000的线段树

A操作就是单点修改

Q操作就是区间查询

每个节点维护的是当前节点及其子树的最大值

A操作就是一个简单的单点修改,只要记录上一次修改的位置,+1就是要修改的位置

Q操作就是一个区间查询,查询该区间的最大值,只要改变return的东西就好了

代码:

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#define rii register int i
using namespace std;
struct node{
long long maxn;
}x[];
char cz;
long long v,ans,m,d,mw;
long long add(int wz,long long val,int l,int r,int bh)
{
if(l==r)
{
x[bh].maxn+=val;
return x[bh].maxn;
}
int harf=(l+r)/;
if(wz>harf)
{
x[bh].maxn=max(x[bh].maxn,add(wz,val,harf+,r,bh*+));
}
else
{
x[bh].maxn=max(x[bh].maxn,add(wz,val,l,harf,bh*));
}
return x[bh].maxn;
}
long long ask(int l,int r,int nl,int nr,int bh)
{
long long ltt=;
if(l==nl&&r==nr)
{
return x[bh].maxn;
}
int half=(nl+nr)/;
if(l<=half&&r>half)
{
ltt=max(ltt,ask(l,half,nl,half,bh*));
ltt=max(ltt,ask(half+,r,half+,nr,bh*+));
}
else
{
if(l<=half)
{
ltt=max(ltt,ask(l,r,nl,half,bh*));
}
else
{
ltt=max(ltt,ask(l,r,half+,nr,bh*+));
}
}
return ltt;
}
int main()
{
scanf("%lld%lld\n",&m,&d);
for(rii=;i<=m;i++)
{
scanf("%c%lld\n",&cz,&v);
if(cz=='Q')
{
ans=ask(mw-v+,mw,,,);
printf("%d\n",ans);
}
else
{
mw++;
// ans=1e9+7;
// r1=max(r1,v);
add(mw,(ans+v)%d,,,);
// cout<<x[1].maxn;
}
}
}

最新文章

  1. iOS本地推送与远程推送
  2. Js 关于console 在IE 下的兼容问题
  3. SublimeText2 快捷键一览
  4. java中IO流操作的标准异常类
  5. HTTP Status 404&ndash;/webDemo/hello
  6. Python 判断一个字符串是否在列表中任何一个字符串中出现过
  7. Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
  8. 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理【转】
  9. iis7.5 应用程序池 经典模式和集成模式的区别
  10. Java super与this用法解析
  11. Windows 7下 搭建 基于 ssh 的sftp 服务器
  12. 如何维护一个1000 IP的免费代理池
  13. vuex的简易入门
  14. OV2685翻转问题
  15. linux学习之uniq
  16. DLL的晚绑定与早绑定
  17. log4j的配置详解(转)
  18. Ubuntu 16.04 安装Navicat Premium
  19. CF1137F Matches Are Not a Child&#39;s Play(LCT思维题)
  20. hdu 折线分割平面(递推)

热门文章

  1. ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
  2. html-标题标签、水平线标签和特殊字符
  3. CSS3中的变形与动画(一)
  4. 注入类型(Injection Type)
  5. Windows资源管理器对物理内存的描述
  6. php 四种基本排序算法
  7. wmware共享磁盘redhat 5.8挂载问题
  8. java--final 类在程序中的影响
  9. SSH 本地和服务器传输
  10. 【[ZJOI2010]网络扩容】