제출 #1327937

#제출 시각아이디문제언어결과실행 시간메모리
1327937DeltaStructPainting Walls (APIO20_paint)C++20
100 / 100
271 ms15048 KiB
#include <bits/stdc++.h>
using namespace std;
#include "paint.h"

int minimumInstructions(int n,int m,int q,vector<int> C,vector<int> A,vector<vector<int>> B){
  multiset<int> M;
  vector<vector<int>> D(q);
  for (int i(0);i < m;++i) for (int k:B[i]) D[k].emplace_back(i);
  vector<int> dp(m),E;
  for (int i(n-1);i > -1;--i){
    vector<int> F(D[C[i]].size());
    for (int k(0);k < (int)F.size();++k) F[k] = dp[(D[C[i]][k]+1)%m]+1;
    for (int a:E) dp[a] = 0;
    for (int k(0);k < (int)F.size();++k) dp[D[C[i]][k]] = F[k];
    E = D[C[i]];
    if (!F.empty()&&*max_element(F.begin(),F.end())>=m) M.emplace(i);
  }
  int ret(0);
  for (int i(0);i < n;){
    if (M.empty()||*M.begin()>i) return -1;
    int x = i;
    while(!M.empty()&&*M.begin()<=i) x = *M.begin()+m,M.erase(M.begin());
    i = x,++ret;
  }
  return ret;
}
#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...