zoukankan      html  css  js  c++  java
  • 【BZOJ1012】 【JSOI2008】最大数maxnumber

    Description

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

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

    Sample Input

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

    Sample Output

    96
    93
    96

    HINT

     

    维护一棵线段树。。。插入点和查询时处理一下即可。

    Source:

    #include <iostream>
    #include <cstdio>
    #define N 200000
    using namespace std;
    int segtree[4*N];
    int n,me,ans;
    void adddata(int now)
    {
        segtree[now]=max(segtree[(now<<1)],segtree[(now<<1)+1]);
    }
    void pointchange(int now,int l,int r,int x,int v)
    {
        if (l==r)    {segtree[now]+=v;    segtree[now]%=me;    return;}
        int mid=(l+r)>>1;
        if (x<=mid)    pointchange((now<<1),l,mid,x,v);
        else    pointchange((now<<1)+1,mid+1,r,x,v);
        adddata(now);
    }
    void query(int now,int l,int r,int begin,int end)
    {
        if (begin<=l && end>=r)    {ans=max(ans,segtree[now]);return;}
        int mid=(l+r)>>1;
        if (begin<=mid)    query((now<<1),l,mid,begin,end);
        if (end>mid)    query((now<<1)+1,mid+1,r,begin,end);
    }
    int main()
    {
        int i,num=0,x;
        char s[10];
        scanf("%d%d",&n,&me);
        for (i=1;i<=n;i++)
        {
            scanf("%s %d",s,&x);
            if (s[0]=='A')
            {
                num++;
                pointchange(1,1,n,num,ans+x);
            }
            else
            {
                ans=-99999999;
                query(1,1,n,num-x+1,num);
                printf("%d
    ",ans);
            }
        }
        return 0;
    }
    —Anime Otaku Save The World.
  • 相关阅读:
    bzoj1588
    bzoj1607
    bzoj2427
    Java-链表LinkedList源码原理分析,并且通过LinkedList构建队列
    Java --HashMap源码解析
    Java--volatile关键字的作用与用法
    Java--正则表达式-简单的在字符串中找数字
    Java--通过Spring AOP进行事务管理
    Java--String 和StringBuilder、StringBuffer 的区别?
    Java多线程--wait(),notify(),notifyAll()的用法
  • 原文地址:https://www.cnblogs.com/DMoon/p/5095191.html
Copyright © 2011-2022 走看看