답안 #1102217

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1102217 2024-10-17T16:23:09 Z nhphuc 나일강 (IOI24_nile) C++17
38 / 100
66 ms 14864 KB
#include <bits/stdc++.h>

using namespace std;

#define int long long

void init (vector<int32_t> &a, vector<pair<int, int>> &b){
	vector<int32_t> tmp = a;
	for (int i = 0; i < b.size(); ++i)
		a[i] = tmp[b[i].second];
	return;
}

const int N = 100007;

vector<int> par(N), mn(N), sum(N), sz(N), val(N); 

int acs (int u){
	return (u == par[u] ? u : par[u] = acs(par[u]));
} 

vector<int> calculate_costs (
	vector<int32_t> w, vector<int32_t> a, 
	vector<int32_t> b, vector<int32_t> e
){
	int n = a.size(), q = e.size();
	vector<int> ans(q); vector<pair<int, int>> d(q), x(n), events;
	for (int i = 0; i < n; ++i)
		x[i] = {w[i], i};
	for (int i = 0; i < q; ++i)
		d[i] = {e[i], i};
	sort(d.begin(), d.end());
	sort(x.begin(), x.end());
	init(a, x);
	init(b, x);
	init(w, x);
	int res = 0;
	for (int i = 0; i < n; ++i){
		res += 1ll * a[i];
		par[i] = i;
		sz[i] = 1;
		sum[i] = b[i];
		mn[i] = a[i] - b[i];
		val[i] = a[i];
	}
	for (int i = 0; i < n - 1; ++i)
		events.push_back({w[i + 1] - w[i], i});
	sort(events.begin(), events.end());
	int j = 0;
	for (auto [x, y] : d){
		while (j < events.size() && events[j].first <= x){
			int i = events[j].second;
			int u = acs(i);
			int v = acs(i + 1);
			int t = (val[u] + val[v]);
			res -= t;
			if (sz[u] < sz[v])
				swap(u, v);
			par[v] = u;
			sz[u] += sz[v];
			mn[u] = min(mn[u], mn[v]);
			sum[u] += sum[v];
			val[u] = min((sz[u] % 2ll ? sum[u] + mn[u] : sum[u]), t);
			res += val[u];
			++j;
		}
		ans[y] = res;
	}
	return ans;
}

// int32_t main (){
// 	#define task "test"
// 	if (fopen(task".inp", "r")){
// 	    freopen(task".inp", "r", stdin);
// 	    freopen(task".out", "w", stdout);
// 	}
// 	int n, q; cin >> n >> q;
// 	vector<int32_t> w(n), a(n), b(n), e(q);
// 	for (int32_t &x : w) cin >> x;
// 	for (int32_t &x : a) cin >> x;
// 	for (int32_t &x : b) cin >> x;
// 	for (int32_t &x : e) cin >> x;
// 	vector<int> ans = calculate_costs(w, a, b, e);
// 	for (int x : ans)
// 		cout << x << " ";
// }

Compilation message

nile.cpp: In function 'void init(std::vector<int>&, std::vector<std::pair<long long int, long long int> >&)':
nile.cpp:9:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |  for (int i = 0; i < b.size(); ++i)
      |                  ~~^~~~~~~~~~
nile.cpp: In function 'std::vector<long long int> calculate_costs(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
nile.cpp:51:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |   while (j < events.size() && events[j].first <= x){
      |          ~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4176 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4432 KB Output is correct
2 Correct 4 ms 4432 KB Output is correct
3 Correct 4 ms 4448 KB Output is correct
4 Correct 4 ms 4432 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 6 ms 4432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 32 ms 11716 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 11708 KB Output is correct
2 Correct 34 ms 11740 KB Output is correct
3 Correct 38 ms 11856 KB Output is correct
4 Correct 40 ms 11716 KB Output is correct
5 Correct 38 ms 11708 KB Output is correct
6 Correct 42 ms 11792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4432 KB Output is correct
2 Correct 4 ms 4432 KB Output is correct
3 Correct 4 ms 4448 KB Output is correct
4 Correct 4 ms 4432 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 6 ms 4432 KB Output is correct
7 Incorrect 4 ms 4444 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4432 KB Output is correct
2 Correct 4 ms 4432 KB Output is correct
3 Correct 4 ms 4448 KB Output is correct
4 Correct 4 ms 4432 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 6 ms 4432 KB Output is correct
7 Incorrect 32 ms 11716 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 33 ms 11708 KB Output is correct
2 Correct 34 ms 11740 KB Output is correct
3 Correct 38 ms 11856 KB Output is correct
4 Correct 40 ms 11716 KB Output is correct
5 Correct 38 ms 11708 KB Output is correct
6 Correct 42 ms 11792 KB Output is correct
7 Correct 53 ms 14788 KB Output is correct
8 Correct 55 ms 14836 KB Output is correct
9 Correct 66 ms 14780 KB Output is correct
10 Correct 60 ms 14792 KB Output is correct
11 Correct 61 ms 14780 KB Output is correct
12 Correct 59 ms 14780 KB Output is correct
13 Correct 59 ms 14780 KB Output is correct
14 Correct 57 ms 14860 KB Output is correct
15 Correct 66 ms 14864 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4176 KB Output is correct
2 Correct 4 ms 4432 KB Output is correct
3 Correct 4 ms 4432 KB Output is correct
4 Correct 4 ms 4448 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 4 ms 4432 KB Output is correct
7 Correct 6 ms 4432 KB Output is correct
8 Incorrect 32 ms 11716 KB Output isn't correct
9 Halted 0 ms 0 KB -