其他分享
首页 > 其他分享> > BZOJ-1012 [JSOI2008]最大数maxnumber(线段树)

BZOJ-1012 [JSOI2008]最大数maxnumber(线段树)

作者:互联网

题目描述

  维护一个初始为空的序列,\(m(m\leq 2\times 10^5)\) 次操作,有两种操作:

  查询操作:Q L,查询当前序列中末尾 \(L\) 个数中的最大的数,并输出这个数的值。

  插入操作:A d,将数字 \(d\) 加上 \(lastans\),\(lastans\) 是最近一次查询操作的答案,并将所得结果对一个固定的常数 \(p\) 取模,将所得答案插入到序列的末尾。

分析

   将长为 \(2\times 10^5\) 的序列初始化为一个极小值,之后线段树单点修改,区间查询即可。

代码

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
const int N=2e5+10;
const int INF=0x7fffffff;
int m,mod;
struct SegmentTree
{
    int l,r;
    long long maxn;
}tree[N<<2];
void build(int p,int l,int r)
{
    tree[p].l=l;tree[p].r=r;
    if(l==r)
    {
        tree[p].maxn=-INF;
        return ;
    }
    int mid=(l+r)/2;
    build(p*2,l,mid);
    build(p*2+1,mid+1,r);
    tree[p].maxn=max(tree[p*2].maxn,tree[p*2+1].maxn);
}
void update(int p,int x,long long v)
{
    if(tree[p].l==tree[p].r)
    {
        tree[p].maxn=v;
        return ;
    }
    int mid=(tree[p].l+tree[p].r)/2;
    if(x<=mid)
        update(p*2,x,v);
    else
        update(p*2+1,x,v);
    tree[p].maxn=max(tree[p*2].maxn,tree[p*2+1].maxn);
}
int query(int p,int l,int r)
{
    if(l<=tree[p].l&&tree[p].r<=r)
        return tree[p].maxn;
    int mid=(tree[p].l+tree[p].r)/2;
    int ans=-INF;
    if(l<=mid)
        ans=max(ans,query(p*2,l,r));
    if(r>mid)
        ans=max(ans,query(p*2+1,l,r));
    return ans;
}
int cnt;
long long lastans;
int main()
{
    cin>>m>>mod;
    build(1,1,N);
    while(m--)
    {
        char ch;
        int d;
        cin>>ch;
        d=read();
        if(ch=='A')
        {
            cnt++;
            update(1,cnt,(lastans+d)%mod);
        }
        if(ch=='Q')
        {
            lastans=query(1,cnt-d+1,cnt);
            printf("%lld\n",lastans);
        }
    }
    return 0;
}

标签:maxnumber,10,cnt,ch,最大数,int,JSOI2008,long,lastans
来源: https://www.cnblogs.com/DestinHistoire/p/14041617.html