题目描述

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

1、 查询操作。

语法:Q L

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

限制:L不超过当前数列的长度。

2、 插入操作。

语法:A n

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

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

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

                                  --by luogu

https://daniu.luogu.org/problem/show?pid=1198



先把序列的空位建好线段树,初始序列是空的,就先建为极小值(注意她是负的),对每个A操作,就是在相应位置单点修改,对每个Q操作,就是查询相应的位置的区间最值

位置是什么呢?

发现只要记下当前序列的结尾就迎刃而解啦;

代码如下:

 #include<cstdio>
using namespace std;
long long D,n,t;
int tree[];
int m,len;
void build(int ,int ,int );
void change(int ,int, int ,int );
int MAX(int ,int ,int ,int ,int );
int main()
{
int i,j,k,l;
char c;
scanf("%d%d",&m,&D);
build(,m,);
for(i=;i<=m;i++){
c=getchar();
while(c!='A'&&c!='Q')
c=getchar();
if(c=='A'){
scanf("%lld",&n);
n=(n+t)%D;
change(,m,,len+);
len++;
}
if(c=='Q'){
scanf("%d",&l);
t=MAX(,m,,len-l+,len);
printf("%lld\n",t);
}
}
return ;
}
void build(int l,int r,int nu){
if(l==r){
tree[nu]=-;
return;
}
int mid=(l+r)>>;
build(l,mid,nu<<);build(mid+,r,nu<<|);
tree[nu]=-;
}
void change(int l,int r,int nu,int x){
if(l==r){
tree[nu]=n;
return ;
}
int mid=(l+r)>>;
if(x<=mid)
change(l,mid,nu<<,x);
else
change(mid+,r,nu<<|,x);
if(tree[nu<<]>tree[nu<<|])
tree[nu]=tree[nu<<];
else
tree[nu]=tree[nu<<|];
}
int MAX(int l,int r,int nu,int L,int R){
if(L<=l&&r<=R)
return tree[nu];
int mid=(l+r)>>;
int Lmax=-,Rmax=-;
if(L<=mid)
Lmax=MAX(l,mid,nu<<,L,R);
if(R>=mid+)
Rmax=MAX(mid+,r,nu<<|,L,R);
if(Lmax>Rmax)
return Lmax;
return Rmax;
}

话说代码真难看呵;


[JSOI2008]最大数 线段树解法的更多相关文章

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

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

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

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

  3. [Swust OJ 746]--点在线上(线段树解法及巧解)

    题目链接:http://acm.swust.edu.cn/problem/746/ Time limit(ms): 1000 Memory limit(kb): 65535   fate是一个数学大牛 ...

  4. P1198 最大数 线段树水题

    这道题模拟一下可以过,但是我们发现线段树也可以安全水过...... 写的线段树只需要滋磁单点修改,区间求max即可 我一开始犯了一个很SB的错误:每次插入修改了t,然后疯狂爆0到怀疑人生... 而且我 ...

  5. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  6. Luogu P1198 BZOJ 1012 最大数 (线段树)

    手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/article/details/77449455 URL: (Lu ...

  7. 【42%】【hdu1166】排兵布阵(树状数组解法&&线段树解法)

    Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...

  8. LG1198/BZOJ1012 「JSOI2008」最大数 线段树+离线

    问题描述 LG1198 BZOJ1012 题解 我们把所有操作离线,设一共有\(n\)个插入操作. 于是提前建立\(n\)个数,全部设为\(-INF\) 接着逐个处理操作即可. \(\mathrm{C ...

  9. 【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012 题意:维护一个数列,开始时没有数值,之后会有两种操作, Q L :查询数列末 ...

随机推荐

  1. Android跳转淘宝、京东APP商品详情页

    import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...

  2. php-fpm epoll封装

    参考 http://www.jianshu.com/p/dac223d7d9ad 事件对象结构 //fpm_event.h struct fpm_event_s { int fd; /* IO 文件句 ...

  3. leetcode-219-Contains Duplicate II(使用set来判断长度为k+1的闭区间中有没有重复元素)

    题目描述: Given an array of integers and an integer k, find out whether there are two distinct indices i ...

  4. C#-WebForm-★★★JQuery知识——DOM操作★★★

    例如: $("#btn1").attr( "disabled" , "disabled" ); 例如: $("#d1") ...

  5. app.module.ts说明

    import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; ...

  6. 配置Nginx支持pathinfo模式

    Nginx服务器默认不支持pathinfo, 在需要pathinfo支持的程序中(如thinkphp),则无法支持”/index.php/Home/Index/index”这种网址.网上流传的解决办法 ...

  7. 01背包-记忆化搜索到成型的DP

    记忆化搜索 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,W; int dp[105][ ...

  8. Vue.js 动态挂载子组件

    直接来实例 父组件 <template> <div> <div :is="sub.content" :ref="sub.name" ...

  9. Mac下Go2Shell配合ITerm2无法定位到当前文件夹目录的解决方法

    下载最新版,这个问题在最新版已经完美解决. http://zipzapmac.com/go2shell

  10. MongoDB日志文件过大

    MongoDB日志文件过大 MongoDB启动的时候指定了--logpath为一个日志文件.随着时间此文件会变得越来越大,达到好几个G. 因为不想让MongoDB进程重新启动,所以不能停止进程删除此文 ...