• Cogs 1844. [JSOI2008]最大数maxnumber


    1. [JSOI2008]最大数maxnumber
      ★★ 输入文件:bzoj_1012.in 输出文件:bzoj_1012.out 简单对比
      时间限制:3 s 内存限制:162 MB
      【题目描述】
      现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。注意:初始时数列是空的,没有一个数。
      【输入格式】
      第一行两个整数,M和D,其中M表示操作的个数(M <= 200,000),D如上文中所述,满足1≤int64max
      【输出格式】
      对于每一个查询操作,你应该按照顺序依次输出结果,每个结果占一行。
      【样例输入】
      5 100
      A 96
      Q 1
      A 97
      Q 1
      Q 2
      【样例输出】
      96
      93
      96
      【题目来源】
      耒阳大视野(衡阳八中) OJ 1012
    /*
    区间修改+求区间max. 
    */
    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #define LL long long
    #define MAXN 200001
    using namespace std;
    LL n,m,cut,mod;
    struct data{
        LL l,r,lc,rc,sum,bj;
    }tree[MAXN*4];
    LL read(){
        LL x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
        return x*f;
    }
    void build(LL l,LL r){
        LL k=++cut;
        tree[k].l=l,tree[k].r=r;
        if(l==r){
            tree[k].sum=0;
            return ;
        }
        LL mid=(l+r)>>1;
        tree[k].lc=cut+1;
        build(l,mid);
        tree[k].rc=cut+1;
        build(mid+1,r);
    }
    void change(LL k,LL p,LL add){
        if(tree[k].l==tree[k].r&&tree[k].l==p){
            tree[k].sum=add;
            return ;
        }
        LL mid=(tree[k].l+tree[k].r)>>1;
        if(p<=mid) change(tree[k].lc,p,add);
        else if(p>mid) change(tree[k].rc,p,add);
        tree[k].sum=max(tree[tree[k].lc].sum,tree[tree[k].rc].sum);
    }
    LL query(LL k,LL l,LL r){
        if(l<=tree[k].l&&tree[k].r<=r) return tree[k].sum;
        LL tot=-0x7fffffff;
        LL mid=(tree[k].l+tree[k].r)>>1;
        if(r<=mid) tot=max(query(tree[k].lc,l,r),tot);
        else if(l>mid) tot=max(query(tree[k].rc,l,r),tot);
        else tot=max(max(query(tree[k].lc,l,mid),query(tree[k].rc,mid+1,r)),tot);
        return tot;
    }
    int main(){
        freopen("bzoj_1012.in","r",stdin);
        freopen("bzoj_1012.out","w",stdout);
        LL x,y,z,p=0;
        char ch;
        m=read();mod=read();build(1,m);
        for(int i=1;i<=m;i++){
            cin>>ch;x=read();
            if(ch=='A') change(1,++n,(x+p+mod)%mod);
            else {
                p=query(1,n-x+1,n);
                cout<<p;printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    网站学习网站
    ajax利用json进行服务器与客户端的通信
    Json 数据
    Servlet 编程 请求的转发
    Servlet 编程 简单流程处理(重定向)
    Servlet 编程 http请求类型
    myeclipse10 .jsp将表单提交给.java(form网页与后台通信初识)
    myeclipse10 将一个java工程合并到web工程
    myeclipse 第一个web project
    JAVA字符串转日期或日期转字
  • 原文地址:https://www.cnblogs.com/nancheng58/p/6070782.html
Copyright © 2020-2023  润新知