Submission #1016284

#TimeUsernameProblemLanguageResultExecution timeMemory
1016284bachhoangxuan단층 (JOI16_ho_t5)C++17
100 / 100
94 ms17076 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
#define int long long

int n,q;

struct BIT{
    int bit[maxn];
    void update(int x,int val){
        for(int i=x;i<=n;i+=(i&(-i))) bit[i]+=val;
    }
    int query(int x){
        int res=0;
        for(int i=x;i>=1;i-=(i&(-i))) res+=bit[i];
        return res;
    }
}c0,c1;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin >> n >> q;
    for(int i=1;i<=n;i++) c0.update(i,1),c1.update(i,1);
    vector<array<int,3>> a;
    for(int i=1;i<=q;i++){
        int x,d,w;cin >> x >> d >> w;w*=2;
        a.push_back({x,d,w});
    }
    reverse(a.begin(),a.end());
    for(auto [x,d,w]:a){
        if(d==1){
            int l=1,r=n;
            while(l<r){
                int m=(l+r+1)>>1;
                if(c0.query(m)<=x) l=m;
                else r=m-1;
            }
            if(c0.query(l)<=x) c1.update(1,-w),c1.update(l+1,w);
        }
        else{
            int l=1,r=n;
            while(l<r){
                int m=(l+r)>>1;
                if(c1.query(m)>x) r=m;
                else l=m+1;
            }
            if(c1.query(l)>x) c0.update(l,w);
        }
    }
    for(int i=1;i<=n;i++) cout << (c0.query(i)-c1.query(i))/2 << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...