Submission #728920

#TimeUsernameProblemLanguageResultExecution timeMemory
728920stevancvPainting Walls (APIO20_paint)C++14
100 / 100
910 ms263636 KiB
#include <bits/stdc++.h> #include "paint.h" #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 1e5 + 2; const int inf = 1e9; int st[4 * N]; void Add(int node, int l, int r, int x, int y) { smin(st[node], y); if (l == r) return; int mid = l + r >> 1; if (x <= mid) Add(2 * node, l, mid, x, y); else Add(2 * node + 1, mid + 1, r, x, y); } int Get(int node, int l, int r, int ql, int qr) { if (r < ql || qr < l) return inf; if (ql <= l && r <= qr) return st[node]; int mid = l + r >> 1; return min(Get(2 * node, l, mid, ql, qr), Get(2 * node + 1, mid + 1, r, ql, qr)); } int minimumInstructions(int n, int m, int k, vector<int> c, vector<int> a, vector<vector<int>> b) { vector<vector<int>> pos(k); for (int i = 0; i < m; i++) { for (int j = 0; j < a[i]; j++) { pos[b[i][j]].push_back(i); } } vector<vector<int>> v(m); for (int i = 0; i < n; i++) { int oo = i % m; for (int j : pos[c[i]]) { int tko = j - oo; if (tko < 0) tko += m; v[tko].push_back(i); } } vector<int> moze(n); for (int i = 0; i < m; i++) { for (int j = m - 1; j < v[i].size(); j++) { if (v[i][j - m + 1] + m - 1 == v[i][j]) moze[v[i][j]] = 1; } } for (int i = 1; i <= 4 * n; i++) st[i] = inf; vector<int> dp92(n, inf); Add(1, 0, n, 0, 0); for (int i = 0; i < n; i++) { if (moze[i] == 0) continue; int val = Get(1, 0, n, i - m + 1, i); if (val != inf) dp92[i] = val + 1; Add(1, 0, n, i + 1, dp92[i]); } if (dp92[n - 1] == inf) dp92[n - 1] = -1; return dp92[n - 1]; }

Compilation message (stderr)

paint.cpp: In function 'void Add(int, int, int, int, int)':
paint.cpp:16:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   16 |     int mid = l + r >> 1;
      |               ~~^~~
paint.cpp: In function 'int Get(int, int, int, int, int)':
paint.cpp:23:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   23 |     int mid = l + r >> 1;
      |               ~~^~~
paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:44:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |         for (int j = m - 1; j < v[i].size(); 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...