제출 #495645

#제출 시각아이디문제언어결과실행 시간메모리
495645AmerHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
17 / 100
3093 ms81256 KiB
#include <iostream>
#include<map>
#include<vector>
#include<queue>
#include<stack>

using namespace std;

class mem
{
public:
	int maxCombination = 0;
	int maxNumber = 0;
	int lastIndex = 0;
};

struct CompareMem {
	bool operator()(mem const& a, mem const& b)
	{
		// return "true" if "p1" is ordered
		// before "p2", for example:
		return a.lastIndex < b.lastIndex;
	}
};


const int maxN = 1000005;

int arr[maxN];

map<int, priority_queue<mem, vector<mem>, CompareMem>> memorisation;

int solve(int start, int finish, int mood)
{
	bool possible = true;

	mem now;

	now.lastIndex = finish;
	now.maxNumber = arr[start - 1];
	now.maxCombination = 0;

	for (int i = start; i < finish; i++)
	{
		stack<mem> temp;

		if (memorisation[i].size() != 0)
		{
			for (int j = 0; j < memorisation[i].size(); j++)
			{
				if (memorisation[i].top().lastIndex < finish)
				{
					if (memorisation[i].top().maxCombination > mood)
					{
						return false;
					}
				}
				else
				{
					break;
				}

				temp.push(memorisation[i].top());

				memorisation[i].pop();
			}

			while (!temp.empty())
			{
				memorisation[i].push(temp.top());

				temp.pop();
			}
		}

		if (now.maxNumber > arr[i])
		{
			if (arr[i] + now.maxNumber > mood)
			{
				possible = false;
			}

			if (arr[i] + now.maxNumber > now.maxCombination)
			{
				now.maxCombination = arr[i] + now.maxNumber;
			}
		}
		else
		{
			now.maxNumber = arr[i];
		}
	}

	memorisation[start].push(now);

	return possible;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

    int n, m;

    cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}

	for (int i = 0; i < m; i++)
	{
		int start, finish, mood;

		cin >> start >> finish >> mood;

		cout << solve(start, finish, mood)<<endl;
	}
}

/*
5 2
3 5 1 8 2
1 3 6
2 5 3
*/

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

sortbooks.cpp: In function 'int solve(int, int, int)':
sortbooks.cpp:49:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::priority_queue<mem, std::vector<mem>, CompareMem>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |    for (int j = 0; j < memorisation[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...
#Verdict Execution timeMemoryGrader output
Fetching results...