Submission #865115

# Submission time Handle Problem Language Result Execution time Memory
865115 2023-10-24T05:40:32 Z vjudge1 Meteors (POI11_met) C++17
24 / 100
6000 ms 43336 KB
#include <bits/stdc++.h>

#define file(s) freopen(s".in", "r", stdin); freopen(s".out", "w", stdout);
#define adiyer(); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define all(x) x.begin(), x.end()
#define eb emplace_back
#define elif else if
#define uns unsigned
#define emp empty()
#define S second
#define F first
#define int long long

using namespace std;

typedef long long ll;
typedef vector < ll > vl;
typedef vector < int > vi;
typedef pair < ll, ll > pll;
typedef pair < int, int > pii;
typedef vector < pair < ll, ll > > vpll;
typedef vector < pair < int, int > > vpii;

const int N = 3e5 + 123;
const int mod = 1e9 + 7;
const int mxlg = 30;
const int P = 31;
const int K = 599;
const ll inf = 1e9 + 10;

ll n, m, k;
ll x[N], y[N], a[N], l[N], r[N], t[4 * N], z[4 * N];

vector < ll > ans[N];

void push(ll v, ll l, ll r){
	if(z[v] == 0) return;
	if(l != r){
		z[(v << 1)] += z[v];
		z[(v << 1) + 1] += z[v];
	}
	t[v] += z[v] * (r - l + 1);
	z[v] = 0;
}

void upd(ll v, ll l, ll r, ll tl, ll tr, ll x){
	push(v, l, r);
	if(tr < l || r < tl) return;
	if(tl <= l && r <= tr){
		z[v] += x;
		push(v, l, r);
		return;
	}
	ll m = ((l + r) >> 1);
	upd((v << 1), l, m, tl, tr, x);
	upd((v << 1) + 1, m + 1, r, tl, tr, x);
	t[v] = t[(v << 1)] + t[(v << 1) + 1];
}

ll get(ll v, ll l, ll r, ll pos){
	push(v, l, r);
	if(l == r) return t[v];
	ll m = ((l + r) >> 1);
	if(pos <= m) return get((v << 1), l, m, pos);
	else return get((v << 1) + 1, m + 1, r, pos);	
}

bool f(ll tm, ll cur){
	ll res = 0;
	for(int i = 1; i <= tm; i++){		
		if(l[i] <= r[i]){
			upd(1LL, 1LL, m, l[i], r[i], a[i]);
		}
		else{
			upd(1LL, 1LL, m, l[i], m, a[i]);
		 	upd(1LL, 1LL, m, 1LL, r[i], a[i]);
		}
	}
	for(auto it : ans[cur]) res += get(1LL, 1LL, m, it);
	for(int i = 1; i <= tm; i++){		
		if(l[i] <= r[i]){
			upd(1LL, 1LL, m, l[i], r[i], -a[i]);
		}
		else{
			upd(1LL, 1LL, m, l[i], m, -a[i]);
		 	upd(1LL, 1LL, m, 1LL, r[i], -a[i]);
		}
	}
	return res >= y[cur];
}

void output(){
	cin >> n >> m;
	for(int i = 1; i <= m; i++) cin >> x[i], ans[x[i]].eb(i);
	for(int i = 1; i <= n; i++) cin >> y[i];
	cin >> k;
	for(int i = 1; i <= k; i++) cin >> l[i] >> r[i] >> a[i];
	for(int i = 1; i <= n; i++){
		ll tl = 0, tr = k + 1;
		while(tr - tl > 1){
			ll tm = ((tl + tr) >> 1);
			if(f(tm, i)) tr = tm;
			else tl = tm;
		}
		if(tr == k + 1) cout << "NIE\n";
		else cout << tr << '\n';
	}
}

const bool cases = 0;

signed main(){
//  file("disrupt");
    adiyer();
    int tt = 1;
    if(cases) cin >> tt;
    for(int i = 1; i <= tt; i++){
//      cout << "Case " << i << ":\n";
        output();
    }
}
# Verdict Execution time Memory Grader output
1 Correct 405 ms 21080 KB Output is correct
2 Correct 2403 ms 21152 KB Output is correct
3 Correct 609 ms 21328 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 469 ms 21080 KB Output is correct
2 Correct 222 ms 21152 KB Output is correct
3 Correct 2649 ms 21156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 6040 ms 23644 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 6043 ms 23644 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 6006 ms 23896 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 6090 ms 23716 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 6050 ms 42068 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 6020 ms 43336 KB Time limit exceeded
2 Halted 0 ms 0 KB -