답안 #1102203

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1102203 2024-10-17T16:14:36 Z nhphuc 나일강 (IOI24_nile) C++17
38 / 100
71 ms 15000 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);
			res -= val[u] + val[v];
			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] = (sz[u] % 2ll ? sum[u] + mn[u] : sum[u]);
			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 5 ms 4432 KB Output is correct
3 Correct 4 ms 4432 KB Output is correct
4 Correct 4 ms 4604 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 3 ms 4432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 29 ms 11716 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 11728 KB Output is correct
2 Correct 33 ms 11724 KB Output is correct
3 Correct 40 ms 11684 KB Output is correct
4 Correct 38 ms 11720 KB Output is correct
5 Correct 41 ms 11724 KB Output is correct
6 Correct 44 ms 11716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4432 KB Output is correct
2 Correct 5 ms 4432 KB Output is correct
3 Correct 4 ms 4432 KB Output is correct
4 Correct 4 ms 4604 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 3 ms 4432 KB Output is correct
7 Incorrect 5 ms 4432 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4432 KB Output is correct
2 Correct 5 ms 4432 KB Output is correct
3 Correct 4 ms 4432 KB Output is correct
4 Correct 4 ms 4604 KB Output is correct
5 Correct 4 ms 4432 KB Output is correct
6 Correct 3 ms 4432 KB Output is correct
7 Incorrect 29 ms 11716 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 11728 KB Output is correct
2 Correct 33 ms 11724 KB Output is correct
3 Correct 40 ms 11684 KB Output is correct
4 Correct 38 ms 11720 KB Output is correct
5 Correct 41 ms 11724 KB Output is correct
6 Correct 44 ms 11716 KB Output is correct
7 Correct 52 ms 14964 KB Output is correct
8 Correct 55 ms 14780 KB Output is correct
9 Correct 60 ms 14784 KB Output is correct
10 Correct 59 ms 14780 KB Output is correct
11 Correct 64 ms 14780 KB Output is correct
12 Correct 71 ms 15000 KB Output is correct
13 Correct 58 ms 14788 KB Output is correct
14 Correct 57 ms 14780 KB Output is correct
15 Correct 63 ms 14780 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 5 ms 4432 KB Output is correct
4 Correct 4 ms 4432 KB Output is correct
5 Correct 4 ms 4604 KB Output is correct
6 Correct 4 ms 4432 KB Output is correct
7 Correct 3 ms 4432 KB Output is correct
8 Incorrect 29 ms 11716 KB Output isn't correct
9 Halted 0 ms 0 KB -