Submission #72126

#TimeUsernameProblemLanguageResultExecution timeMemory
72126동진의 (#118)Box Run (FXCUP3_box)C++17
100 / 100
497 ms9500 KiB
#include <stdio.h>
#include <algorithm>
using namespace std;

struct segment_tree
{
	int tree_max[2000005];

	void update(int i, int value, int node, int start, int end)
	{
		if (i < start || end < i)
			return;
		else if (start == end)
		{
			tree_max[node] = value;
		}
		else
		{
			int mid = start + end >> 1;
			update(i, value, node * 2, start, mid);
			update(i, value, node * 2 + 1, mid + 1, end);
			tree_max[node] = max(tree_max[node * 2], tree_max[node * 2 + 1]);
		}
	}

	int maxValue(int l, int r, int node, int start, int end)
	{
		if (r < start || end < l)
			return 0;
		else if (l <= start && end <= r)
			return tree_max[node];
		else
		{
			int mid = start + end >> 1;
			return max(maxValue(l, r, node * 2, start, mid), maxValue(l, r, node * 2 + 1, mid + 1, end));
		}
	}
};

segment_tree st;
int h[500005];

int main()
{
	int n;

	scanf(" %d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf(" %d", h + i);
		st.update(i, h[i], 1, 1, n);
	}


	int x = 1;
	for (int i = 1; i <= n; i++)
	{
		while (x < n)
		{
			if (x - i + 1 >= 1 && h[x + 1] > st.maxValue(x - i + 1, x, 1, 1, n))
			{
				printf("%d ", x - i + 1);
				break;
			}
			x++;
		}
		if (x >= n)
			printf("-1 ");
	}
	printf("\n");
	return 0;
}

Compilation message (stderr)

box.cpp: In member function 'void segment_tree::update(int, int, int, int, int)':
box.cpp:19:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = start + end >> 1;
              ~~~~~~^~~~~
box.cpp: In member function 'int segment_tree::maxValue(int, int, int, int, int)':
box.cpp:34:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = start + end >> 1;
              ~~~~~~^~~~~
box.cpp: In function 'int main()':
box.cpp:47:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf(" %d", &n);
  ~~~~~^~~~~~~~~~~
box.cpp:50:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf(" %d", h + i);
   ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...