Submission #1309626

#TimeUsernameProblemLanguageResultExecution timeMemory
1309626namhhPainting Walls (APIO20_paint)C++20
12 / 100
32 ms13508 KiB
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fi first #define se second const int N = 1e5+5; int cur[N],dp[N],check[N]; vector<int>pos[N],t; 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++){ for(int j = 0; j < a[i]; j++) pos[b[i][j]].push_back(i); } for(int i = 0; i < n; i++){ vector<pii>dm; for(int col: pos[c[i]]){ int loj = (col+m-1) % m; dm.push_back({col,cur[loj]+1}); } if(i) for(int col: pos[c[i-1]]) cur[col] = 0; for(auto[x,y]: dm){ if(y >= m) check[i-m+1] = 1; cur[x] = y; } } dp[0] = 0; for(int i = 1; i <= n; i++) dp[i] = 1e9; deque<int>dq; dq.push_back(0); for(int i = 1; i <= n; i++){ if(dq.size() && dq.front() == i-m-1) dq.pop_front(); if(dq.size()) dp[i] = dp[dq.front()]+1; if(check[i]){ while(dq.size() && dp[dq.back()] > dp[i]) dq.pop_back(); dq.push_back(i); } } if(dp[n] >= 1e9) return -1; return dp[n]; }
#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...