#include <algorithm>
#include <iostream>
#include <iomanip>
#include <bitset>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define ent "\n"
const int maxn = 3e5 + 100;
const ll INF = (ll)2e18;
const int inf = (ll)2e9;
const int maxl = 26;
const int MOD = 1e9 + 7;
ll n, m, q, sz;
vector<ll> g[maxn];
ll a[maxn];
ll d[maxn * 60];
ll L[maxn * 60];
ll R[maxn * 60];
ll root[maxn];
ll copy(ll v){
ll nv = ++sz;
d[nv] = d[v];
L[nv] = L[v];
R[nv] = R[v];
return nv;
}
ll build(ll tl = 1, ll tr = m){
ll v = ++sz;
if(tl < tr){
ll mid = (tl + tr) >> 1;
L[v] = build(tl, mid);
R[v] = build(mid + 1, tr);
}
return v;
}
ll upd(ll l, ll r, ll x, ll v, ll tl = 1, ll tr = m){
ll nv = copy(v);
if(tl > r || tr < l) return nv;
if(l <= tl && tr <= r) d[nv] += x;
else{
ll mid = (tl + tr) >> 1;
L[nv] = upd(l, r, x, L[nv], tl, mid);
R[nv] = upd(l, r, x, R[nv], mid+1, tr);
}
return nv;
}
ll upd1(ll l, ll r, ll x, ll v, ll tl = 1, ll tr = m){
ll nv = copy(v);
if(r < tl && tr < l) return nv;
if(l <= tl || tr <= r) d[nv] += x;
else{
ll mid = (tl + tr) >> 1;
L[nv] = upd1(l, r, x, L[nv], tl, mid);
R[nv] = upd1(l, r, x, R[nv], mid+1, tr);
}
return nv;
}
ll get(ll i, ll v, ll tl = 1, ll tr = m){
if(tl == tr) return d[v];
ll mid = (tl + tr) >> 1;
if(i <= mid) return get(i, L[v], tl, mid) + d[v];
else return get(i, R[v], mid + 1, tr) + d[v];
}
void test(){
cin >> n >> m;
root[0] = build();
for(ll i = 1; i <= m; i++){
ll x; cin >> x;
g[x].push_back(i);
}
for(ll i = 1; i <= n; i++){
cin >> a[i];
}
cin >> q;
for(ll i = 1; i <= q; i++){
ll l, r, x;
cin >> l >> r >> x;
if(l <= r) root[i] = upd(l, r, x, root[i-1]);
else root[i] = upd1(l, r, x, root[i-1]);
}
for(ll i = 1; i <= n; i++){
ll ans = -1;
for(ll l = 0, r = q; l <= r;){
ll mid = (l + r) >> 1;
ll sum = 0;
for(ll x: g[i]){
sum += get(x, root[mid]);
}
if(sum < a[i]) l = mid + 1;
else r = mid - 1, ans = mid;
}
if(ans == -1) cout << "NIE\n";
else cout << ans << ent;
}
}
int main(){
// freopen("cows.in", "r", stdin);
// freopen("cows.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int t; t = 1;
while(t--) test();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
8020 KB |
Output is correct |
2 |
Correct |
4 ms |
8148 KB |
Output is correct |
3 |
Correct |
5 ms |
8148 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
8148 KB |
Output is correct |
2 |
Correct |
4 ms |
8148 KB |
Output is correct |
3 |
Correct |
4 ms |
8148 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
57 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
62 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
72 ms |
45304 KB |
Output is correct |
2 |
Runtime error |
52 ms |
65536 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
71 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
102 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
100 ms |
65536 KB |
Execution killed with signal 9 |
2 |
Halted |
0 ms |
0 KB |
- |