Submission #1300854

#TimeUsernameProblemLanguageResultExecution timeMemory
1300854maxbrucelenMeteors (POI11_met)C++20
100 / 100
808 ms34180 KiB
#include<bits/stdc++.h>
using namespace std;
using LL = long long;
#define endl '\n'
#define int long long
const LL inf = 1e18, maxn = 600005;

LL n,m,K,o[maxn],g[maxn],as[maxn],w[maxn];
pair<int,int> p[maxn];
vector<int> arr[maxn];
LL bit[maxn];

inline int lb(int x){
    return x&(-x);
}
void modify(int x,int v){
    for(int i=x;i<maxn;i+=lb(i)) bit[i] += v;
}   
LL query(int x){
    LL sum = 0;
    for(int i=x;i;i-=lb(i)) sum += bit[i];
    return sum;
}

void modify(int l,int r,int op){
    for(int i=l;i<=r;++i){
        if(i == K+1) continue;
        if(p[i].second >= p[i].first){
            modify(p[i].first,w[i]*op);
            modify(p[i].second+1,-w[i]*op);
        }else{
            modify(p[i].first,w[i]*op);
            modify(m+1,-w[i]*op);

            modify(1,w[i]*op);
            modify(p[i].second+1,-w[i]*op);
        }
    }
}

void split(vector<int> &qs,vector<int> &L, vector<int> &R){
    for(int i:qs){
        unsigned long long sum = 0;
        for(int j:arr[i]) sum += query(j);
        if(sum >= g[i]) L.push_back(i);
        else R.push_back(i);
    }
    vector<int>().swap(qs);
}

void rec(int l,int r,vector<int> &qs){
    if(l == r){
        for(int i:qs) as[i] = l;
        return;
    }
    int mid = (l+r)/2;
    modify(l,mid,1);
    vector<int> L,R;
    split(qs,L,R);
    rec(mid+1,r,R);
    modify(l,mid,-1);
    rec(l,mid,L);
}


main(){
    ios::sync_with_stdio(0); cin.tie(0);
    cin>>n>>m;   
    for(int i=1;i<=m;++i) cin>>o[i];
    for(int i=1;i<=n;++i) cin>>g[i];
    cin>>K;
    for(int i=1;i<=K;++i) cin>>p[i].first>>p[i].second>>w[i];

    for(int i=1;i<=m;++i) arr[o[i]].push_back(i);
    vector<int> qs;
    for(int i=1;i<=n;++i) qs.push_back(i);
    
    rec(1,K+1,qs);
    for(int i=1;i<=n;++i){
        if(as[i] != K+1) cout<<as[i]<<endl; 
        else cout<<"NIE"<<endl;
    } 
}

Compilation message (stderr)

met.cpp:66:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   66 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...