Submission #1333171

#TimeUsernameProblemLanguageResultExecution timeMemory
1333171Zone_zoneeMeteors (POI11_met)C++20
74 / 100
642 ms24560 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 3e5+10;

int n, m;
ll fw[N]; // m
void u(int idx, ll val){
    for(; idx < N; idx += idx&(-idx)) fw[idx] += val;
}
ll query(int idx){
    ll res = 0;
    for(; idx > 0; idx -= idx&(-idx)) res += fw[idx];
    return res;
}
void upd(int l, int r, ll a){
    if(l > r){
        // (1 to l) and (r to n)
        // (1 to n) - (l+1 to n) + (r to n)
        u(1, a);
        u(r+1, -a);
        u(l, a);
    }else{
        //(l to n) - (r+1 to n)
        u(l, a);
        u(r+1, -a);
    }
}
int wanted[N]; // n
int owner[N]; // m
vector<int> owned[N]; // n
int l[N], r[N]; // n
int x[N], y[N]; ll a[N]; // k
vector<int> queries[N]; // k
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m;
    for(int i = 1; i <= m; ++i) cin >> owner[i], owned[owner[i]].push_back(i);
    for(int i = 1; i <= n; ++i) cin >> wanted[i];
    int k; cin >> k;
    for(int i = 1; i <= k; ++i) cin >> x[i] >> y[i] >> a[i];
    for(int i = 1; i <= n; ++i) l[i] = 0, r[i] = k+1;
    while(1){
        bool finished = 1;
        memset(fw, 0, sizeof fw);
        for(int i = 1; i <= k; ++i) queries[i].clear();
        for(int i = 1; i <= n; ++i){
            if(l[i] != r[i]){
                finished = 0;
                queries[(l[i]+r[i])>>1].push_back(i);
            }
        }
        if(finished) break;
        for(int i = 0; i <= k; ++i){
            if(i != 0) upd(x[i], y[i], a[i]);
            for(int idx : queries[i]){
                ll sum = 0;
                for(int p : owned[idx]){
                    sum += query(p);
                }
                if(sum >= wanted[idx]) r[idx] = i;
                else l[idx] = i+1;
            }
        }
    }
    for(int i = 1; i <= n; ++i){
        if(l[i] == k+1) cout << "NIE\n";
        else cout << l[i] << '\n';
    }
}
#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...