Submission #1199509

#TimeUsernameProblemLanguageResultExecution timeMemory
1199509ericl23302September (APIO24_september)C++20
100 / 100
69 ms6264 KiB
#include "september.h"

#include <bits/stdc++.h>
#include <vector>
#include <algorithm>

using namespace std;

// void topSort(vector<bool> &visited, vector<int> &res, vector<int> &parents, int cur) {
// 	if (visited[cur] || !cur) return;
// 	visited[cur] = true;
// 	topSort(parents[cur]);
// 	res.push_back(cur);
// }

int solve(int N, int M, std::vector<int> F, std::vector<std::vector<int>> S) {
	// vector<bool> visited(N, false);
	// vector<int> res;
	vector<pair<int, int>> firstLastOccurances(N, {N, 0});
	for (auto &s : S) {
		for (int i = 0; i < N - 1; ++i) {
			firstLastOccurances[s[i]].first = min(firstLastOccurances[s[i]].first, i);
			firstLastOccurances[s[i]].second = max(firstLastOccurances[s[i]].second, i);
		}
	}

	vector<int> arr(N - 1, 0);
	for (int i = 1; i < N; ++i) {
		++arr[firstLastOccurances[i].first];
		--arr[firstLastOccurances[i].second];
		if (firstLastOccurances[F[i]].first <= firstLastOccurances[i].second) ++arr[firstLastOccurances[F[i]].first], --arr[firstLastOccurances[i].second];
	}

	for (int i = 1; i < N - 1; ++i) arr[i] += arr[i - 1];
	int res = 0;
	for (int i : arr) res += (i == 0);

	return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...