Submission #1339280

#TimeUsernameProblemLanguageResultExecution timeMemory
1339280Nipphitch단층 (JOI16_ho_t5)C++20
100 / 100
92 ms10824 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long 
const int N=2e5+5;

int n,q,t[2][N];
pair <int,int> p[N];

struct NODE{
    int x,ty,l;
} qu[N];

void update(int k,int idx,int val){
    for(int i=idx;i<N;i+=(i&-i)) t[k][i]+=val;
}

int query(int k,int idx){
    int res=0;
    for(int i=idx;i>0;i-=(i&-i)) res+=t[k][i];
    return res;
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    for(int i=1;i<=n;i++) update(0,i,1);
    for(int i=1;i<=q;i++) cin >> qu[i].x >> qu[i].ty >> qu[i].l;
    for(int i=q;i>=1;i--){
        auto [x,ty,l]=qu[i];
        if(ty==1){
            int lo=0,hi=n;
            while(lo<hi){
                int mid=(lo+hi+1)/2;
                if(query(0,mid)<=x) lo=mid;
                else hi=mid-1;
            }
            if(lo==0) continue;
            update(1,1,l);
            update(1,lo+1,-l);
        }
        else{
            int lo=1,hi=n+1;
            while(lo<hi){
                int mid=(lo+hi)/2;
                if(query(0,mid)-2*query(1,mid)>x) hi=mid;
                else lo=mid+1;
            }
            update(0,lo,l*2);
            update(1,lo,l);
        }
    }
    for(int i=1;i<=n;i++) cout << query(1,i) << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...