답안 #659511

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
659511 2022-11-18T10:33:54 Z franfill Restore Array (RMI19_restore) C++17
13 / 100
118 ms 196008 KB
#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n, m;
	cin >> n >> m;
	vector < vector < int > > greater(n, vector < int > (n+1, 0));
	vector < vector < int > > smaller(n, vector < int > (n+1, n));

	for (int i = 0; i < m; i++)
	{
		int l, r, k, value;
		cin >> l >> r >> k >> value;
		r++;
		int len = r-l;
		if (value == 0)
			smaller[l][r] = min(smaller[l][r], len - k);
		else
			greater[l][r] = max(greater[l][r], len - k + 1);
	}
	for (int i = 0; i < n; i++)
		smaller[i][i+1] = min(smaller[i][i+1], 1);

/*
	for (int i = 0; i < n; i++)
		for (int j = i+1; j <= n; j++)
			cerr << i << " -> " << j << " " << smaller[i][j] << " " << greater[i][j] << "\n";
	*/

	vector < int > mi(n+1, 0);
	vector < int > ma(n+1, n);
	ma[0] = 0;
	for (int i = 0; i < n; i++)
	{
		int res = 0;
		for (int j = n; j > i; j--)
		{
			res = max(res, greater[i][j]);
			mi[j] = max(mi[j], mi[i] + res);
			ma[j] = min(ma[j], ma[i] + smaller[i][j]);
			res = max(res-1, 0);
		}
		if (res != 0)
		{
			cout << -1 << "\n";
			return 0;
		}
	}

	for (int i = 0; i < n; i++)
		for (int j = i+1; j <= n; j++)
		{
			/*if (mi[j] <= mi[i] + smaller[i][j])
			{
				cout << -1 << "\n";
				return 0;
			}*/
		}

	vector < int > res;
	for (int i = 1; i <= n; i++)
	{
		if (mi[i] > ma[i])
		{
			cout << -1 << "\n";
			return 0;
		}
		res.emplace_back(mi[i] - mi[i-1]);
		//assert(res.back() == 1 || res.back() == 0);
	}
	for (auto x : res)
		cout << x << " ";
	cout << "\n";
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 195712 KB Output is correct
2 Correct 114 ms 192732 KB Output is correct
3 Correct 116 ms 196008 KB Output is correct
4 Correct 111 ms 191716 KB Output is correct
5 Correct 109 ms 190452 KB Output is correct
6 Correct 118 ms 195872 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 195712 KB Output is correct
2 Correct 114 ms 192732 KB Output is correct
3 Correct 116 ms 196008 KB Output is correct
4 Correct 111 ms 191716 KB Output is correct
5 Correct 109 ms 190452 KB Output is correct
6 Correct 118 ms 195872 KB Output is correct
7 Correct 113 ms 191600 KB Output is correct
8 Correct 112 ms 192292 KB Output is correct
9 Incorrect 112 ms 193072 KB Output isn't correct
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -