제출 #1300696

#제출 시각아이디문제언어결과실행 시간메모리
1300696NewtonabcRestore Array (RMI19_restore)C++20
13 / 100
6 ms840 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];
int cal(int l,int r){
    if(r<0) 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;
            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];
    }
    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...