• bzoj 1012: [JSOI2008]最大数maxnumber 线段树


    1012: [JSOI2008]最大数maxnumber

    Time Limit: 3 Sec  Memory Limit: 162 MB

    Description

      现在请求你维护一个数列,要求提供以下两种操作:1、 查询操作。语法:Q L 功能:查询当前数列中末尾L
    个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。2、 插入操作。语法:A n 功能:将n加
    上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取
    模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个
    数。

    Input

      第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足D在longint内。接下来
    M行,查询操作或者插入操作。

    Output

      对于每一个询问操作,输出一行。该行只有一个数,即序列中最后L个数的最大数。

    Sample Input

    5 100
    A 96
    Q 1
    A 97
    Q 1
    Q 2

    Sample Output

    96
    93
    96

    HINT

      数据如下http://pan.baidu.com/s/1i4JxCH3

    Source

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    const int N=2e5+10,M=1e6+10,inf=1e9+10;
    const ll INF=1e18+10;
    int maxx[N<<2];
    void pushup(int pos)
    {
        maxx[pos]=max(maxx[pos<<1],maxx[pos<<1|1]);
    }
    void update(int point,ll change,int l,int r,int pos)
    {
        if(l==r&&l==point)
        {
            maxx[pos]=change;
            return;
        }
        int mid=(l+r)>>1;
        if(point<=mid)
            update(point,change,l,mid,pos<<1);
        else
            update(point,change,mid+1,r,pos<<1|1);
        pushup(pos);
    }
    ll query(int L,int R,int l,int r,int pos)
    {
        if(L<=l&&r<=R)
        {
            return maxx[pos];
        }
        int mid=(l+r)>>1;
        ll ans=0;
        if(R>mid)
        ans=max(ans,query(L,R,mid+1,r,pos<<1|1));
        if(L<=mid)
        ans=max(ans,query(L,R,l,mid,pos<<1));
        return ans;
    }
    ll n,m,pre,x,len;
    char ch[10];
    int main()
    {
        len=1;pre=0;
        scanf("%lld%lld",&n,&m);
        for(ll i=1;i<=n;i++)
        {
            scanf("%s%lld",&ch,&x);
            if(ch[0]=='A')
            update(len,(x+pre)%m,1,200000,1),len++;
            else
            {
                pre=query(len-x,200000,1,200000,1)%m;
                printf("%lld
    ",pre);
            }
        }
        return 0;
    }
  • 相关阅读:
    springboot配置tomcat大全
    python 列表推导式
    python中yield的用法详解——最简单,最清晰的解释
    正则表达式
    python 装饰器
    python 接口类、抽象类、多态
    python split和os.path.split()
    pyhton 多继承的执行顺序
    python unittest 加载测试用例的方法
    python unittest中的四个概念
  • 原文地址:https://www.cnblogs.com/jhz033/p/5848162.html
Copyright © 2020-2023  润新知