题目描述

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

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;
}
}
}

[JSOI2008]最大数(线段树基础)的更多相关文章

  1. [JSOI2008]最大数 (线段树)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>=0 ...

  2. [JSOI2008]最大数 线段树解法

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  3. BZOJ1012 [JSOI2008]最大数 线段树

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:LLL不超过当前数列的长度.(L> ...

  4. P1198 [JSOI2008]最大数(线段树基础)

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  5. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  6. HDU 1754 I Hate It(线段树基础应用)

    基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...

  7. 线段树基础模板&&扫描线

    线段树的单点更新+区间求和 hdu1166敌兵布阵 Input 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=),表示敌人有N个工兵营地 ,接下来有N个正整数,第i个正整 ...

  8. POJ 2777 线段树基础题

    题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...

  9. hdu 1698 Just a Hook(线段树基础)

    成段更新的线段树,加入了延时标记............ 线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来 #include <iostream> #include ...

随机推荐

  1. python的用户输入和while循环

    1.函数input()工作原理 函数input()让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. (1)获取数值可以用 int()函数 (2)求 ...

  2. Hibernate中的一对一注解配置

    Card类 package cn.OneToOne2017109.entity; import javax.persistence.*; /** * Created by YSS on 2017/10 ...

  3. stark——分页、search、actions

    一.分页 1.引入自定义分页组件 在/stark目录下创建utils工具包目录,复制page.py到该目录下,文件中有之前自定义的分页组件. class Pagination(object): def ...

  4. 如何在web.config文件中配置Session变量的生命周期

    实例说明:在网上购物商城中,为了维护在线购物环境,一般只有注册会员才可以购买商品.实现购物功能时,先通过Session变量记录会员的登录名,然后在购买商品页面通过判断会员是否登录确定其能否购买商品. ...

  5. HTML 5网页设计入门必读(书)

    今天看了一本由人民邮电出版社出版.邢薇薇 郭俊飞 王雪翻译的<HTML 5网页设计入门必读>,在此整理一下知识点,以及写一些自己的读后感. 本书的开章还是和大部分HTML 5书籍一样,用极 ...

  6. 注入类型(Injection Type)

    a) setter(重要) <property name="userDAO"> <ref bean="u"/> </propert ...

  7. Selenium2学习(七)-- 定位一组元素find_elements

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  8. HttpClient拉取连载小说

    上午刚入手的小说,下午心血来潮想从网站上拉取下来做成电子书,呵呵,瞎折腾-说做就做- [抓包] 这一步比什么都重要,如果找不到获取真正资源的那个请求,就什么都不用做了- 先是打算用迅雷把所有页面都下载 ...

  9. March 1 2017 Week 9 Wednesday

    If you are serious giving up something, giving up is not serious at all. 如果你慎重地决定要放弃,那么放弃本身就没什么大不了的. ...

  10. BAT的云

    近期,关于用国内那家云非常纠结! 我也来说道说道各家云. 首先,说说我想要的云服务(按优先级): 0.最好能提供二级域名.移动互联网时代,顶级域名必需要吗?在手机浏览器上输入长长的域名非常蛋痛(即不要 ...