35求助
查看原帖
35求助
422387
VIOLET__FOREVER楼主2023/8/30 21:12
#include<bits/stdc++.h>
#define int long long
#define ls root<<1
#define rs root<<1|1
#define as (start+end)>>1

const int N=800005;

using namespace std;

inline int read(){
    int t=1,x=0;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') t=-1;
    for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
    return t*x; 
}

int c,q,n;
int tr[N<<2];
int sum[N<<2];
int tim,flag;

void pushup(int root){
    tr[root]=max(tr[ls],tr[rs]);
}
void updata(int root,int start,int end,int loc,int val){
    if(start==end){
        tr[root]=val;
        return ;
    }
    int mid=as;
    if(loc<=mid) updata(ls,start,mid,loc,val);
    else updata(rs,mid+1,end,loc,val);
    pushup(root);
}
int qurey(int root,int start,int end,int l,int r){
    if(start>=l && end<=r) return tr[root];
    int mid=as;
    int res=0;
    if(mid>=l) res=max(res,qurey(ls,start,mid,l,r));
    if(mid<r) res=max(res,qurey(rs,mid+1,end,l,r));
    return res;
}
signed main(){
    cin>>c>>q;
    flag=1;
    while(q--){
        int num=read();
        if(num==1){
            int x=read();
            n++;
            sum[n]=sum[n-1]+x;
            updata(1,1,n,n,x);
        }
        else if(num==2){
            int x=read();
            tim+=x;
            while(sum[flag]<=tim) flag++;
        }
        else if(num==3){
            int x=read();
            int qwq=lower_bound(sum+1,sum+n+1,tim+x)-sum;//二分
            x+=tim;
            cout<<x-sum[qwq-1]<<endl;
        }
        else{
            cout<<qurey(1,1,n,flag,n)<<endl;
        }
    }
    return 0;
}

真的尽力了

2023/8/30 21:12
加载中...