Submission #831068

# Submission time Handle Problem Language Result Execution time Memory
831068 2023-08-19T16:48:46 Z NothingXD Distributing Candies (IOI21_candies) C++17
100 / 100
4275 ms 11788 KB
#include "candies.h"
#include <bits/stdc++.h>

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")

using namespace std;

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void debug_out(){cerr << endl;}
template<typename Head, typename... Tail>
void debug_out(Head H, Tail... T){
	cerr << H << ' ';
	debug_out(T...);
}

#define debug(...) cerr << "(" << #__VA_ARGS__ << "): ", debug_out(__VA_ARGS__)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define MP(x, y) make_pair(x, y)

const int maxn = 2e5 + 10;
const int S = 2048;

int n, q, a[maxn], c[maxn], l[maxn], r[maxn], v[maxn];

void add1(int l, int r, int x){
//	debug(1, l, r, x);
	for (int i = l; i <= r; i++){
		a[i] = (a[i]+x > c[i]? c[i]: a[i]+x);
	}
}

void add2(int l, int r, int x){
//	debug(2, l, r, x);
	for (int i = l; i <= r; i++){
		a[i] = (a[i]+x < 0? 0: a[i]+x);
	}
}

void add3(int l, int r, int x, int y){
//	debug(3, l, r, x, y);
	for (int i = l; i <= r; i++){
		a[i] = (a[i]+x > c[i]? c[i]: a[i]+x);
//		debug(i, a[i]);
		a[i] = (a[i]+y < 0? 0: a[i]+y);
//		debug(i, a[i]);
	}
}

void add4(int l, int r, int x, int y){
	//debug(4, l, r, x, y);
	for (int i = l; i <= r; i++){
		a[i] = (a[i]+x < 0? 0: a[i]+x);
		a[i] = (a[i]+y > c[i]? c[i]: a[i]+y);
	}
}

vector<int> distribute_candies(vector<int> C, vector<int> L, vector<int> R, vector<int> V) {
	n = C.size();
	q = L.size();
	for (int i = 0; i < n; i++){
		c[i] = C[i];
	}
	for (int i = 0; i < q; i++){
		l[i] = L[i];
		r[i] = R[i];
		v[i] = V[i];
	}
	for (int st = 0; st < n; st += S){
	for (int i = 0; i < q; i += 2){
		if (i + 1 == q){
			int L = max(st, l[i]);
			int R = min(st+S-1, r[i]);
			if (v[i] > 0) add1(L, R, v[i]);
			if (v[i] < 0) add2(L, R, v[i]);
			break;
		}
		int L1 = max(st, l[i]);
		int R1 = min(st+S-1, r[i]);
		int L2 = max(st, l[i+1]);
		int R2 = min(st+S-1, r[i+1]);
		if (v[i] == 0 && v[i+1] == 0) continue;
		if (v[i] >= 0 && v[i+1] >= 0){
			add1(L1, min(R1, L2-1), v[i]);
			add1(L2, min(R2, L1-1), v[i+1]);
			add1(max(L1, L2), min(R1, R2), min(v[i]+v[i+1],(int)1e9));
			add1(max(L1, R2+1), R1, v[i]);
			add1(max(L2, R1+1), R2, v[i+1]);
		}
		else if (v[i] <= 0 && v[i+1] <= 0){
			add2(L1, min(R1, L2-1), v[i]);
			add2(L2, min(R2, L1-1), v[i+1]);
			add2(max(L1, L2), min(R1, R2), max(v[i]+v[i+1],(int)-1e9));
			add2(max(L1, R2+1), R1, v[i]);
			add2(max(L2, R1+1), R2, v[i+1]);
		}
		else if (v[i] >= 0 && v[i+1] <= 0){
			add1(L1, min(R1, L2-1), v[i]);
			add2(L2, min(R2, L1-1), v[i+1]);
			add3(max(L1, L2), min(R1, R2), v[i], v[i+1]);
			add1(max(L1, R2+1), R1, v[i]);
			add2(max(L2, R1+1), R2, v[i+1]);
		}
		else{
			add2(L1, min(R1, L2-1), v[i]);
			add1(L2, min(R2, L1-1), v[i+1]);
			add4(max(L1, L2), min(R1, R2), v[i], v[i+1]);
			add2(max(L1, R2+1), R1, v[i]);
			add1(max(L2, R1+1), R2, v[i+1]);
		}
	}
	}
	vector<int> ans;
	for (int i = 0; i < n; i++){
		ans.push_back(a[i]);
	}
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2385 ms 11772 KB Output is correct
2 Correct 2373 ms 11740 KB Output is correct
3 Correct 2376 ms 11636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 65 ms 7404 KB Output is correct
3 Correct 62 ms 5540 KB Output is correct
4 Correct 2293 ms 11624 KB Output is correct
5 Correct 2278 ms 11576 KB Output is correct
6 Correct 2288 ms 11648 KB Output is correct
7 Correct 2237 ms 11788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 83 ms 7412 KB Output is correct
4 Correct 79 ms 4544 KB Output is correct
5 Correct 4228 ms 11632 KB Output is correct
6 Correct 4228 ms 11764 KB Output is correct
7 Correct 4248 ms 11528 KB Output is correct
8 Correct 4231 ms 11628 KB Output is correct
9 Correct 4275 ms 11628 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 2385 ms 11772 KB Output is correct
7 Correct 2373 ms 11740 KB Output is correct
8 Correct 2376 ms 11636 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 65 ms 7404 KB Output is correct
11 Correct 62 ms 5540 KB Output is correct
12 Correct 2293 ms 11624 KB Output is correct
13 Correct 2278 ms 11576 KB Output is correct
14 Correct 2288 ms 11648 KB Output is correct
15 Correct 2237 ms 11788 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 83 ms 7412 KB Output is correct
19 Correct 79 ms 4544 KB Output is correct
20 Correct 4228 ms 11632 KB Output is correct
21 Correct 4228 ms 11764 KB Output is correct
22 Correct 4248 ms 11528 KB Output is correct
23 Correct 4231 ms 11628 KB Output is correct
24 Correct 4275 ms 11628 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 59 ms 4684 KB Output is correct
27 Correct 65 ms 7396 KB Output is correct
28 Correct 2284 ms 11608 KB Output is correct
29 Correct 2282 ms 11676 KB Output is correct
30 Correct 2280 ms 11576 KB Output is correct
31 Correct 2279 ms 11536 KB Output is correct
32 Correct 2290 ms 11552 KB Output is correct