Submission #1148446

#TimeUsernameProblemLanguageResultExecution timeMemory
1148446arkanefuryMeteors (POI11_met)C++17
74 / 100
6095 ms18288 KiB
#include <bits/stdc++.h>  
#define pb push_back  
using namespace std; 
#define FOR(x, n, m, d) for(int x = n; x <= m; x += d)  
#define FORR(x, n, m, d) for(int x = n; x >= m; x -= d)  
#define nikita ios_base::sync_with_stdio(0), cin.tie(0);  
const int N = 3e5+150;  
int n,m,k,tt,ans,l, r, x, y, cnt; 
int b[N],a[N], sum, root[N], block =  548, d[N], e[N], f[N], ko[N], t[N*6], c[N];
vector<int>v[N];
vector <int> g[550];
int siz = 1;
void upd(int v, int l, int r, int val, int tl = 1, int tr = m){
    if(l > tr || tl > r)return;
    if(l <= tl && tr <= r){
        t[v] += val;
        return;
    }
    int tm = (tl + tr) >> 1;
    upd(v*2, l, r, val, tl, tm);
    upd(v*2+1, l, r, val, tm+1, tr);
}
void get(int v, int pos, int tl = 1, int tr = m){
        ans += t[v];
        ans = min(ans, (int)1e9);
    if(tl == tr){
        return;
    }
    int tm = (tl + tr) >> 1;
    if( pos <= tm )get(v*2, pos, tl, tm);
    else get(v*2+1, pos, tm+1, tr);
}
void clear(int v = 1, int tl = 1, int tr = m){
    t[v] = 0;
    if(tl==tr)return;
    int tm = (tl+tr) >> 1;
    clear(v*2, tl, tm), clear(v*2+1, tm+1, tr);
}
void solve(){
    nikita
    cin >> n >> m;
    FOR(i, 1, m, 1){
        cin >> a[i];
        v[a[i]].pb(i);
    }
    FOR(i, 1, n, 1)cin >> b[i];
    cin >> k;
    FOR(i, 1, k, 1){
        cin >> d[i] >> e[i] >> f[i];
        if(d[i] <= e[i]){
            upd(1, d[i], e[i], f[i]);
            if(b[i/block] != b[(i+1)/block] || i == k){
                FOR(j, 1, n, 1){
                    if(c[j])continue;
                    ans = 0;
                    for(auto ok : v[j]){
                        get(1, ok);
                    }
                if(!c[j] && ans >= b[j])c[j] = 1,g[i/block].pb(j);
                }
            }
        }
        else{
            upd(1, d[i], m, f[i]), upd(1, 1, e[i], f[i]);
            if(b[i/block] != b[(i+1)/block] || i == k){
                FOR(j, 1, n, 1){
                    if(c[j])continue;
                    ans = 0;
                    for(auto ok : v[j]){
                        get(1, ok);
                    }
                if(!c[j] && ans >= b[j])c[j] = 1,g[i/block].pb(j);
                }
            }
        }
    }
    clear();
    FOR(i, 1, k, 1){
        if(d[i] <= e[i]){
            upd(1, d[i], e[i], f[i]);
        }
        else{
            upd(1, d[i], m, f[i]), upd(1, 1, e[i], f[i]);
        }
        for(auto j : g[i/block]){
            if(ko[j])continue;
            ans = 0;
            for(auto ok : v[j])get(1, ok);
            if(ans >= b[j])ko[j] = i;
        }
    }
    FOR(i, 1, n, 1){
        if(!ko[i])cout << "NIE\n";
        else cout << ko[i] << '\n';
    }
}
signed main()  
{  
    nikita  
    tt = 1;  
    if(!tt)cin >> tt;  
    FOR(i, 1, tt, 1){  
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...