• 1012: [JSOI2008]最大数maxnumber


    1012: [JSOI2008]最大数maxnumber

    Time Limit: 3 Sec  Memory Limit: 162 MB
    Submit: 10711  Solved: 4683
    [Submit][Status][Discuss]

    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

    /*
    * @Author: lyuc
    * @Date:   2017-08-14 14:21:13
    * @Last Modified by:   lyuc
    * @Last Modified time: 2017-08-14 14:48:36
    */
    
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAXN 200005
    #define LL long long
    #define INF 0x3f3f3f3f
    #define lson i*2,l,m
    #define rson i*2+1,m+1,r
    
    using namespace std;
    
    LL m,d;
    LL sum[MAXN*4];
    char str[2];
    LL t;
    LL n;
    LL tol=0;
    
    void pushup(LL i,LL l,LL r){
        sum[i]=max(sum[i*2],sum[i*2+1]);
    }
    
    void Insert(LL key,LL val,LL i,LL l,LL r){
        if(l==r){
            sum[i]=val;
            return ;
        }
        LL m=(l+r)/2;
        if(m>=key) Insert(key,val,lson);
        else Insert(key,val,rson);
        pushup(i,l,r);
    }
    
    LL query(LL ql,LL qr,LL i,LL l,LL r){
        if(ql<=l&&r<=qr){
            return sum[i];
        }
        LL m=(l+r)/2;
        LL res=-1;
        if(m>=ql) res=max(res,query(ql,qr,lson));
        if(m<qr) res=max(res,query(ql,qr,rson));
        return res;
    }
    
    void init(){
        memset(sum,0,sizeof sum);
        tol=0;
        t=0;
    }
    
    int main(){ 
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
        init();
        scanf("%lld%lld",&m,&d);
        while(m--){
            scanf("%s%lld",str,&n);
            if(str[0]=='A'){
                n+=t;
                Insert(++tol,n%d,1,1,MAXN-4);
            }else{
                t=query(tol-n+1,tol,1,1,MAXN-4);
                printf("%lld
    ",t);
            }
        }
        return 0;
    }
  • 相关阅读:
    JSP页面
    JSP简介
    常量与变量的声明与使用
    AJAX无刷新上传图片
    JSP连接MySql数据库
    运算符与表达式
    世界级的javascript ajax client端UI库 Ext学习笔记 menu组件 和 toolbar组件
    OOD/OOA基本原则
    Java字符编码转换过程说明
    正则表达式系统教程
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/7357816.html
Copyright © 2020-2023  润新知