题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1012

现在请求你维护一个数列,要求提供以下两种操作: 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

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

算法分析:起初咋一看,可以用线段树做,于是就做了,迅速搞之,交之,WA...,为啥了,不应该呀,查代码,又交之,WA,,,无语中,后来突然想起了,C++提交得用lld呀,平常习惯了I64d了,买了个表的。

不过这道题可以用单调栈做,而且代码比线段树更简单。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define inf 0x7fffffff
using namespace std;
typedef long long LL;
const int maxn=+; LL M,D;
LL cnt,an[maxn],sum[maxn<<]; void PushUP(LL rt) {sum[rt]=max(sum[rt<<],sum[rt<<|]); } void build(LL l,LL r,LL rt)
{
sum[rt]=-inf;
if (l==r) return;
LL mid=(l+r)>>;
build(l,mid,rt<<);
build(mid+,r,rt<<|);
PushUP(rt);
} void update(LL l,LL r,LL rt,LL p,LL value)
{
if (l==r) {sum[rt]=value;return; }
LL mid=(l+r)>>;
if (p<=mid) update(l,mid,rt<<,p,value);
else update(mid+,r,rt<<|,p,value);
PushUP(rt);
} LL query(LL l,LL r,LL rt,LL x,LL y)
{
if (x<=l && r<=y) return sum[rt];
LL mid=(l+r)>>;
LL ret=-inf;
if (y<=mid) ret=max(ret,query(l,mid,rt<<,x,y));
else if (x>mid) ret=max(ret,query(mid+,r,rt<<|,x,y));
else
{
ret=max(ret,query(l,mid,rt<<,x,y));
ret=max(ret,query(mid+,r,rt<<|,x,y));
}
PushUP(rt);
return ret;
} int main()
{
while (scanf("%lld%lld",&M,&D)!=EOF)
{
memset(sum,,sizeof(sum));
LL t=,N=M;
char ch[];
LL l,v;
cnt=;
build(,M,);
for (LL i= ;i<M ;i++)
{
scanf("%s",ch);
if (ch[]=='A')
{
scanf("%lld",&v);
v=(v+t)%D;
update(,N,,++cnt,v);
}
else
{
scanf("%lld",&l);
LL ans=query(,N,,cnt-l+,cnt);
printf("%lld\n",ans);
t=ans;
}
}
}
return ;
}

BZOJ 1012: [JSOI2008]最大数maxnumber 线段树的更多相关文章

  1. bzoj 1012: [JSOI2008]最大数maxnumber (线段树)

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 13081  Solved: 5654[Subm ...

  2. bzoj-1012 1012: [JSOI2008]最大数maxnumber(线段树)

    题目链接: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Description 现在请求你维护一个数列,要 ...

  3. 1012: [JSOI2008]最大数maxnumber 线段树

    https://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数 ...

  4. BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 10374  Solved: 4535[Subm ...

  5. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 4750  Solved: 2145[Submi ...

  6. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值

    这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...

  7. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  8. 【BZOJ 1012】 [JSOI2008]最大数maxnumber(线段树做法)

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 [题意] [题解] 预开一个20W长度的线段树; 这里a[1..20W]={0} ...

  9. BZOJ 1012 [JSOI2008]最大数maxnumber【线段树】

    水题,每次记录一下当前有多少个数,然后按照题目所指示的那样模拟就行,每次向线段树末尾插入(其实是修改)题目中指定的数,然后询问当前的个数到前面Q个数中最大值是多少结果就是,好久不碰线段树了,用数组模拟 ...

随机推荐

  1. VS2010在非IE浏览器下调试Silverlight程序

    以Chrome为例: 第一步:在程序中设置断点. 第二步:右键点击web应用程序的起始页(.html或.aspx文件),选择"浏览方式",选中Chrome或其它非IE浏览器,点&q ...

  2. LevelDB:一个快速轻量级的key-value存储库(译)

    作者:Jeff Dean, Sanjay Ghemawat 原文:http://leveldb.googlecode.com/svn/trunk/doc/index.html 译者:phylips@b ...

  3. 5)Java部分常用package功能介绍

    1> java.lang    (package)   这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可以使用的Package 包中关键类 ...

  4. OVER Clause是个好东西,常和ROW_NUMBER()、Sum、AVG、Count、Min、Max配合使用

    根据SQL官方帮助的实例: USE AdventureWorks2012; GO SELECT ROW_NUMBER() OVER(PARTITION BY PostalCode ORDER BY S ...

  5. SQL Server 基础:Cast和Convert的区别

    CAST 和 CONVERT 都可以将某种数据类型的表达式显式转换为另一种数据类型. 语法: CAST ( expression AS data_type ) CONVERT (data_type[( ...

  6. 谈谈final、finally、finalize的区别

    1.final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承.因此一个类不能被声明为abstract,又被声明为final.将变量或方法声明为final.可以保证他们在 ...

  7. R语言的日期运算

    写hive SQL查询, 需要从导入的参数, 自动累加日期. 从而实现一个自动的,多个日期的统计过程 R语言的日期运算超级简单. > test<-Sys.Date() > test ...

  8. 【Django】Apache上运行单个Django项目,mod_wsgi配置

    1 安装环境 操作系统:Ubuntu 12.04 LTS 32 位(安装在VMware虚拟机中) python 版本: Python 2.7.3 Django版本 >>> djang ...

  9. wpf 动画 2个窗体切换

    <Window x:Class="翻转.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xam ...

  10. Redhat 6环境下安装Oracle 12c的方法

    Step 1: 要在Linux上安装Oracle,需要在安装Oracle之前安装好相应的软件包,在不同操作系统环境下,对软件包的要求各不相同.具体对应的软件包,见官网文档:https://docs.o ...