Submission #645511

#TimeUsernameProblemLanguageResultExecution timeMemory
645511Tenis0206Painting Walls (APIO20_paint)C++11
100 / 100
320 ms13400 KiB
#include <bits/stdc++.h> #include "paint.h" using namespace std; const int oo = INT_MAX; int dp[2][100005]; vector<int> l[100005]; int lmax[100005],dp_rez[100005]; 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(auto it : b[i]) { l[it].push_back(i); } } for(int j=0; j<l[c[0]].size(); j++) { dp[0][j] = 1; } lmax[0] = 1; for(int i=1; i<n; i++) { int p = 0; for(int j=0; j<l[c[i]].size(); j++) { dp[i % 2][j] = 1; if(l[c[i]][j]!=0) { while(p<l[c[i-1]].size() && l[c[i-1]][p] < l[c[i]][j]-1) { ++p; } if(p<l[c[i-1]].size() && l[c[i-1]][p]==l[c[i]][j]-1) { dp[i % 2][j] = max(dp[i % 2][j],dp[(i-1) % 2][p] + 1); } } else { if(!l[c[i-1]].empty() && l[c[i-1]].back()==m-1) { dp[i % 2][j] = max(dp[i % 2][j], 1 + dp[(i-1) % 2][l[c[i-1]].size()-1]); } } lmax[i] = max(lmax[i],dp[i % 2][j]); } } deque<int> q; for(int i=0; i<n; i++) { if(lmax[i] < m) { dp_rez[i] = oo; while(!q.empty() && dp_rez[q.back()] > dp_rez[i]) { q.pop_back(); } q.push_back(i); continue; } while(!q.empty() && q.front() < i - m) { q.pop_front(); } if(i < m) { dp_rez[i] = 1; } else { int val = dp_rez[q.front()]; if(val == oo) { dp_rez[i] = oo; } else { dp_rez[i] = 1 + val; } } while(!q.empty() && dp_rez[q.back()] > dp_rez[i]) { q.pop_back(); } q.push_back(i); } if(dp_rez[n-1]==oo) { dp_rez[n-1] = -1; } return dp_rez[n-1]; }

Compilation message (stderr)

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:23:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for(int j=0; j<l[c[0]].size(); j++)
      |                  ~^~~~~~~~~~~~~~~
paint.cpp:31:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |         for(int j=0; j<l[c[i]].size(); j++)
      |                      ~^~~~~~~~~~~~~~~
paint.cpp:36:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |                 while(p<l[c[i-1]].size() && l[c[i-1]][p] < l[c[i]][j]-1)
      |                       ~^~~~~~~~~~~~~~~~~
paint.cpp:40:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |                 if(p<l[c[i-1]].size() && l[c[i-1]][p]==l[c[i]][j]-1)
      |                    ~^~~~~~~~~~~~~~~~~
#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...