Submission #645502

#TimeUsernameProblemLanguageResultExecution timeMemory
645502Tenis0206Painting Walls (APIO20_paint)C++11
40 / 100
1595 ms20116 KiB
#include <bits/stdc++.h>

#include "paint.h"

using namespace std;

const int oo = INT_MAX;

vector<int> dp[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);
        }
    }
    dp[0].resize(l[c[0]].size());
    for(int j=0;j<l[c[0]].size();j++)
    {
        dp[0][j] = 1;
    }
    lmax[0] = 1;
    for(int i=1;i<n;i++)
    {
        dp[i].resize(l[c[i]].size());
        for(int j=0;j<l[c[i]].size();j++)
        {
            dp[i][j] = 1;
            for(int p=0;p<l[c[i-1]].size();p++)
            {
                int aux1 = l[c[i-1]][p];
                int aux2 = l[c[i]][j];
                if(l[c[i-1]][p]==l[c[i]][j]-1 || (l[c[i-1]][p]==m-1 && l[c[i]][j]==0))
                {
                    dp[i][j] = max(dp[i][j],dp[i-1][p] + 1);
                }
            }
            lmax[i] = max(lmax[i],dp[i][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:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int j=0;j<l[c[0]].size();j++)
      |                 ~^~~~~~~~~~~~~~~
paint.cpp:32:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |         for(int j=0;j<l[c[i]].size();j++)
      |                     ~^~~~~~~~~~~~~~~
paint.cpp:35:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |             for(int p=0;p<l[c[i-1]].size();p++)
      |                         ~^~~~~~~~~~~~~~~~~
paint.cpp:37:21: warning: unused variable 'aux1' [-Wunused-variable]
   37 |                 int aux1 = l[c[i-1]][p];
      |                     ^~~~
paint.cpp:38:21: warning: unused variable 'aux2' [-Wunused-variable]
   38 |                 int aux2 = l[c[i]][j];
      |                     ^~~~
#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...