zoukankan      html  css  js  c++  java
  • 最大数

    题目描述

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

    1、 查询操作。

    语法:Q L

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

    限制:LL不超过当前数列的长度。(L > 0)(L>0)

    2、 插入操作。

    语法:A n

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

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

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

    输入格式

    第一行两个整数,MM和DD,其中MM表示操作的个数(M le 200,000)(M200,000),DD如上文中所述,满足(0<D<2,000,000,000)(0<D<2,000,000,000)

    接下来的MM行,每行一个字符串,描述一个具体的操作。语法如上文所述。

    输出格式

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

    输入输出样例

    输入 #1
    5 100
    A 96
    Q 1
    A 97
    Q 1
    Q 2
    
    输出 #1
    96
    93
    96
    

    说明/提示

    [JSOI2008]

    本题数据已加强

    #include<cstdio>
    const long long inf=-21474836477;
    int m,cnt;
    char op[2];
    long long data[600005],x,t,p;
    long long max(long long a,long long b){
        return a>b?a:b;
    }
    void add(int s,int k,int o,int l,int r){
        if(l==r)
        {
            data[o]=k;
            return;
        }
        int mid=(l+r)>>1;
        if(mid>=s){
            add(s,k,o<<1,l,mid);
        }
        if(mid<s){
            add(s,k,o<<1|1,mid+1,r);
        }
        data[o]=max(data[o<<1],data[o<<1|1])%p;
    }
    long long ask(int ll,int rr,int o,int l,int r){
        if(ll<=l&&rr>=r) return data[o];
        int mid=(l+r)>>1;
        long long a=inf,b=inf;
        if(mid>=ll){
            a=ask(ll,rr,o<<1,l,mid);
        }
        if(mid<rr){
            b=ask(ll,rr,o<<1|1,mid+1,r);
        }
        return max(a,b);
    }
        
    
    inline long long int read(){
       long long int s=0,w=1;
       char ch=getchar();
       while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
       while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
       return s*w;
    }
    
    int main(){
        scanf("%d %lld",&m,&p);
        for(int i=0;i<m;i++){
            scanf("%s %lld",op,&x);
            if(op[0]=='A'){
                add(cnt+1,(x+t)%p,1,1,m);
                cnt++;
            }
            if(op[0]=='Q'){
                if(x==0){
                    t=0;
                }
                else{
                    t=ask(cnt-x+1,cnt,1,1,m)%p;
                }
                printf("%lld
    ",t);
            }
        }
        return 0;
    }
  • 相关阅读:
    ant 软件包不存在报错
    在 Internet Explorer 中使用 Windows 窗体控件
    智能客户端
    Back to the Future with Smart Clients
    "Automation 服务器不能创建对象" 的解决方案
    Top 10 Reasons for Developers to Create Smart Clients
    Updater Application Block for .NET
    Smart Client Application Model and the .NET Framework 1.1
    Security and Versioning Models in the Windows Forms Engine Help You Create and Deploy Smart Clients
    智能客户端技术总结(二)
  • 原文地址:https://www.cnblogs.com/hrj1/p/11211702.html
Copyright © 2011-2022 走看看