zoukankan      html  css  js  c++  java
  • b_lg_最大数 & I Hate It(单点插入)

    两种操作:

    • Q L:查询当前数列中末尾L个数中的最大的数
    • A n:将n加上t,其中t是最近一次查询操作的答案
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+5, inf=0x3f3f3f3f;
    ll m,mod,len,last,a[N<<2];
    void add(int l, int r, ll v, int pos, int k) { //pos是插入位置
        if (l==r) {
            a[k]=v;
            return;
        }
        int m=l+r>>1;
        if (m>=pos) add(l,m,v,pos,k<<1);
        else add(m+1,r,v,pos,k<<1|1);
        a[k]=max(a[k<<1], a[k<<1|1]);
    }
    ll ask(int ql, int qr, int l, int r, int k) {
        if (ql<=l && r<=qr)
            return a[k];
        ll m=l+r>>1, mx=-inf;
        if (m>=ql) mx=max(mx, ask(ql,qr,l,m,k<<1));
        if (m<qr)  mx=max(mx, ask(ql,qr,m+1,r,k<<1|1));
        return mx;
    }
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        cin>>m>>mod;
        for (int i=0; i<m; i++) {
            char t; int n; cin>>t>>n;
            if (t=='A') {
                add(1,m,(last+n)%mod,++len,1);
            } else {
                if (n==0) last=0;
                else last=ask(len-n+1,len,1,m,1);
                cout<<last<<'
    ';
            }
        }
        return 0;
    }
    
  • 相关阅读:
    ubuntu18.04 常用命令
    docker常用命令
    git
    y7000 intel nvidia 双显卡安装Ubuntu16.04
    linux中fork() 函数详解
    理解GBN协议
    C++ sort
    最近点对-分治
    方便查看 linux/kernel/system_call.s
    方便查看 linux/kernel/asm.s
  • 原文地址:https://www.cnblogs.com/wdt1/p/13921894.html
Copyright © 2011-2022 走看看