zoukankan      html  css  js  c++  java
  • BZOJ1012|JSOI最大数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

    分析:我们可以用线段树离线操作,具体看代码……

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #define inf 0x7fffffff;
    using namespace std;
    
    int last=0,cnt=0;
    struct node{
           int l,r,v;
    }tr[800005];
    
    void build(int k,int x,int y)
    {
         tr[k].l=x; tr[k].r=y; tr[k].v=-inf;
         if (x==y) return;
         int mid=(x+y)/2;
         build(k<<1,x,mid); build(k<<1|1,mid+1,y);
    }
    
    void insert(int k,int x,int y)
    {
         int l=tr[k].l,r=tr[k].r;
         if (l==r) { tr[k].v=y; return;}
         int mid=(l+r)/2;
         if (x<=mid) insert(k<<1,x,y);
            else insert(k<<1|1,x,y);
         tr[k].v=max(tr[k<<1].v,tr[k<<1|1].v);
    } 
    
    int ask(int k,int x,int y)
    {
        int l=tr[k].l,r=tr[k].r;
        if (l==x && r==y) return tr[k].v;
        int mid=(l+r)>>1;
        if (y<=mid) return ask(k<<1,x,y);
        else if (x>mid) return ask(k<<1|1,x,y);
        else return max(ask(k<<1,x,mid),ask(k<<1|1,mid+1,y));
    }
    
    int main()
    {
        int n,d;
        scanf("%d%d",&n,&d);
        build(1,1,n);  
        for (int i=1; i<=n; i++)
        {
            int x; char ch[5];
            scanf("%s",ch);
            if(ch[0]=='A')
            {
                cnt++;
                scanf("%d",&x); x=(x+last)%d;
                insert(1,cnt,x);
            }
            else 
            {
                scanf("%d",&x);
                last=ask(1,cnt-x+1,cnt);
                printf("%d
    ",last);
            }
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/Shymuel/p/4648361.html
Copyright © 2011-2022 走看看