Submission #1298226

#TimeUsernameProblemLanguageResultExecution timeMemory
1298226Jawad_Akbar_JJPainting Walls (APIO20_paint)C++20
0 / 100
2 ms572 KiB
#include <iostream>
#include <vector>
#include <deque>

using namespace std;
const int N = 1<<17;
int seen[N], dp[N], Mx[N];
vector<int> ind[N];

int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> A, vector<vector<int>> B){
	for (int i=0;i<m;i++)
		B.push_back(B[i]);

	for (int i=0;i<m+m;i++){
		for (int j : B[i])
			ind[j].push_back(i);
	}

	deque<int> v = {n};
	for (int j=n-1;j>=0;j--){
		if (v.size() > 0 and v.front() - j > m)
			v.pop_front();

		int mx = 0;
		for (int id : ind[c[j]]){
			Mx[id] = 1;
			if (seen[id+1] == j + 1)
				Mx[id] = Mx[id+1] + 1;
			mx = max(mx, Mx[id]);
			seen[id] = j;
		}
		dp[j] = (mx >= m) ? dp[v.front()] + 1 : n + 1;
		while (v.size() and dp[v.back()] >= dp[j])
			v.pop_back();
		v.push_back(j);
	}
	if (dp[0] == n + 1)
		dp[0] = -1;
	return dp[0];
}
#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...