/* In The Name Of Allah */
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define all(x) x.begin() , x.end()
#define ff first
#define ss second
#define pii pair<ll, ll>
#define debug(a, b) cout << a << ' ' << b << '\n'
#define wall cout << "-----------------------------" << '\n';
#define sep ' '
// #define int long long int
void fastIO() {
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
}
const ll N = 5e5 + 5;
const ll M = 1000 + 5;
const ll SQ = 320;
const ll LG = 32;
const ll INF = 1e18;
const ll MOD = 1e9 + 7;
inline ll mod(ll x){ x %= MOD; return (x < 0 ? x + MOD : x);}
// ll mpow(ll a, ll b){
// if (b == 0)
// return 1LL;
// ll ret = mpow(a, b >> 1);
// ret = (ret * ret) % MOD;
// if (b & 1)
// ret = (ret * a) % MOD;
// return ret;
// }
// ll bmm(ll a, ll b){
// return (b ? bmm(b, a % b) : a);
// }
// ll kmm(ll a, ll b){
// return (a*b/bmm(a, b));
// }
// ll lgg2(ll x){
// int ans = 0;
// int val = 1;
// while(val < x){
// val *= 2;
// ans++;
// }
// return ans;
// }
int p[N], num[N], nump[N], cc[N], ans[N];
vector<int> c[N];
void solve(){
int n, m;
cin >> n >> m;
for (int i = 1; i <= m; i++){
int ty; cin >> ty;
c[ty].pb(i);
}
for (int i = 1; i <= n; i++) cin >> p[i];
int q; cin >> q;
int tmp = q;
int o = 1;
vector<pair<pii, pii>> v;
while (q--){
int l, r, x;
cin >> l >> r >> x;
// dayerei --> khat
if (l <= r){
v.pb({{l, r}, {x, tmp-q}});
}
else {
v.pb({{l, m}, {x, tmp-q}});
v.pb({{1, r}, {x, tmp-q}});
}
if (o == SQ || o == tmp){
// st diff
vector<int> diff(m+2, 0);
for (auto op: v){
l = op.ff.ff, r = op.ff.ss, x = op.ss.ff;
diff[l] += x;
diff[r+1] -= x;
}
for (int i = 1; i <= m; i++){
diff[i] += diff[i-1];
cc[i] += diff[i];
}
for (int i = 1; i <= n; i++){
num[i] = 0;
for (int id : c[i]) num[i] += cc[id];
}
// en diff
for (int i = 1; i <= n; i++){
if (num[i] >= p[i] && ans[i] == 0){
bool f = false;
for (auto op: v){
if (f == true) break;
l = op.ff.ff, r = op.ff.ss, x = op.ss.ff;
int d = op.ss.ss;
for (int id : c[i]){
if (f == true) break;
if (id >= l && id <= r){
nump[i] += x;
if (nump[i] >= p[i]){
ans[i] = d;
f = true;
}
}
}
}
}
}
for (int i = 1; i <= n; i++) nump[i] = num[i];
v.clear();
o = 0;
}
o++;
}
for (int i = 1; i <= n; i++){
if (ans[i] == 0){
cout << "NIE" << '\n';
}
else {
cout << ans[i] << '\n';
}
}
}
int main() {
fastIO();
int t = 1;
//cin >> t;
while (t--)
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |