제출 #364797

#제출 시각아이디문제언어결과실행 시간메모리
364797abra_stonePainting Walls (APIO20_paint)C++14
63 / 100
1315 ms524292 KiB
#include "paint.h"
#include <vector>
#include <iostream>
#define N 100005
using namespace std;

int ba, sg[N * 4 + 5];
vector<int> ve[N], di[N], dc[N];

void up(int p, int q) {
	p += ba;
	sg[p] = q;
	for (p /= 2; p > 0; p /= 2) {
		sg[p] = min(sg[p * 2], sg[p * 2 + 1]);
	}
}

int get(int p, int q) {
	int re = 1e9;
	p += ba; q += ba;
	while (p < q) {
		if (p % 2 == 1) re = min(re, sg[p]), p++;
		if (q % 2 == 0) re = min(re, sg[q]), q--;
		p /= 2; q /= 2;
	}
	if (p == q) re = min(re, sg[p]);
	return re;
}

int minimumInstructions(int n, int m, int K, vector<int> c, vector<int> a, vector<vector<int> > b) {
	int i, j, k;

	c.push_back(0);
	for (i = c.size() - 1; i > 0; i--) {
		c[i] = c[i - 1];
	}

	for (i = 0; i <= m; i++) {
		di[0].push_back(i);
		dc[0].push_back(0);
	}

	for (i = 0; i < m; i++) {
		for (j = 0; j < a[i]; j++) {
			ve[b[i][j]].push_back(i);
		}
	}
	for (i = 1; i <= n; i++) {
		for (j = 0; j < ve[c[i]].size(); j++) {
			di[i].push_back(ve[c[i]][j]);
			dc[i].push_back(0);
		}
		di[i].push_back(1e9);
		dc[i].push_back(-1e9);
		for (j = k = 0; j < di[i].size() - 1; j++) {
			if (di[i][j] == 0) {
				if (di[i - 1][di[i - 1].size() - 2] == m - 1) {
					dc[i][j] = dc[i - 1][di[i - 1].size() - 2] + 1;
				} else {
					dc[i][j] = 1;
				}
			} else {
				for (; di[i - 1][k] < di[i][j] - 1; k++);
				if (di[i - 1][k] == di[i][j] - 1) {
					dc[i][j] = dc[i - 1][k] + 1;
				} else {
					dc[i][j] = 1;
				}
			}
		}
	}
	for (ba = 1; ba < n + 1; ba *= 2);
	for (i = 0; i < ba * 2; i++) sg[i] = 1e9;
	up(0, 0);
	for (i = m; i <= n; i++) {
		for (j = 0; j < dc[i].size() - 1; j++) {
			if (dc[i][j] >= m) {
				int t = get(i - m, i - 1) + 1;
				if (t < sg[ba + i]) up(i, t);
			}
		}
	}
	if (get(n, n) < 1e9) return get(n, n);
	else return -1;
}

컴파일 시 표준 에러 (stderr) 메시지

paint.cpp: In function 'int minimumInstructions(int, int, int, std::vector<int>, std::vector<int>, std::vector<std::vector<int> >)':
paint.cpp:49:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |   for (j = 0; j < ve[c[i]].size(); j++) {
      |               ~~^~~~~~~~~~~~~~~~~
paint.cpp:55:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |   for (j = k = 0; j < di[i].size() - 1; j++) {
      |                   ~~^~~~~~~~~~~~~~~~~~
paint.cpp:76:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |   for (j = 0; j < dc[i].size() - 1; 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...