• luogu P1198 [JSOI2008]最大数


    题目描述

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

    1、 查询操作。

    语法:Q L

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

    限制:L不超过当前数列的长度。

    2、 插入操作。

    语法:A n

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

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

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

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    输入输出样例

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

    说明

    [JSOI2008]

     线段树维护

    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define N 200010 
    int n,d,t; 
    int sum[N<<2];
    char a[10];
    int len=0,x;
    int to=0;
    void modify(int l,int r,int to,int rt,int c)
    {
        if(l==r)
        {
            sum[rt]=c;
            return;
        }
        int mid=(l+r)>>1;
        if(to<=mid)modify(l,mid,to,rt<<1,c);
        else modify(mid+1,r,to,rt<<1|1,c);
        sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
    }
    
    int query(int l,int r,int x,int y,int rt)
    {
        if(l==x&&r==y)
            return sum[rt];
        int mid=(l+r)>>1;
        if(y<=mid) return query(l,mid,x,y,rt<<1);
        if(x>mid) return query(mid+1,r,x,y,rt<<1|1);
        int left =query(l,mid,x,mid,rt<<1);  
        int right=query(mid+1,r,mid+1,y,rt<<1|1);  
        return max(left,right);
    }
    int main()
    {
        scanf("%d%d",&n,&d);
        while(n--)
        {
            scanf("%s",a);
            if(a[0]=='Q')
            {
                scanf("%d",&x);
                t=query(1,N-1,len-x+1,len,1);
                printf("%d
    ",t);
            }
            else if(a[0]=='A')
            {
                len++;
                scanf("%d",&x);
                modify(1,N-1,len,1,(x+t)%d);
            }
        }
        return 0;
    }
  • 相关阅读:
    ASP.NET 无提示关闭窗口
    C# Winform程序获取外网IP地址
    使用System.Drawing.Printing 画报表。
    C# Winform调用IP地址、手机归属和身份证查询接口
    C# 获取文中文字符首字母
    C# WinForm给Button或其它控件添加快捷键响应
    C# 获取农历日期
    TSQL之插入的内容是查询出的值
    C# 获取中文星期的两种方法
    C#批量操作控件
  • 原文地址:https://www.cnblogs.com/sssy/p/7081567.html
Copyright © 2020-2023  润新知