Submission #1300701

#TimeUsernameProblemLanguageResultExecution timeMemory
1300701NewtonabcRestore Array (RMI19_restore)C++20
13 / 100
6 ms860 KiB
#include<bits/stdc++.h>
#define tpp tuple<int,int,int,int>
#define ll long long
using namespace std;
const ll MOD=1e9+7;
const int N=5e5+10;
vector<tuple<int,int,int,int>> qr[N];
int ret[N],sum[N],ind;
int cal(int l,int r){
    r=min(r,ind);
    if(r<0 || r<l) return 0;
    int ret=sum[r];
    if(l-1<0) return ret;
    return ret-sum[l-1];
}
priority_queue<tpp,vector<tpp>,greater<tpp>> q;
void solve(){
    int n,m;
    cin>>n >>m;
    for(int i=0;i<m;i++){
        int l,r,k,t;
        cin>>l >>r >>k >>t;
        if(t==0) qr[l].push_back({r,l,t,k});
        else qr[l].push_back({r,l,t,(r-l+1)-(k-1)});
    }
    for(int i=0;i<=n;i++){
        for(auto tp:qr[i]) q.push(tp);
        while(!q.empty()){
            auto [r,l,t,b]=q.top();
            int cb=cal(l,r);
            int ca=(i-l)-cb; //(i-1)-l+1-cb
            if(t==0 && ca>=b){
                q.pop();
                continue;
            }
            if(t==1 && cb>=b){
                q.pop();
                continue;
            }
            if(i>r){
                cout<<-1;
                return;
            }
            break;
        }
        if(i==n) break;
        if(q.empty()) ret[i]=0;
        else ret[i]=get<2>(q.top());
        sum[i]=(i==0?0:sum[i-1])+ret[i];
        ind=i;
    }
    for(int i=0;i<n;i++) cout<<ret[i] <<" ";
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...