답안 #833944

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
833944 2023-08-22T09:41:26 Z vjudge1 Exam (eJOI20_exam) C++17
14 / 100
1000 ms 3436 KB
#include <bits/stdc++.h>

#pragma GCC optimize("O3")
#pragma GCC target("tune=native")
#pragma GCC optimize("unroll-loops")

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

// os.erase(os.find_by_order(os.order_of_key(val)));
#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define MAX LLONG_MAX
#define MOD 1000000007
#define int long long
#define ll __int128
#define endl '\n'
#define fi first
#define se second
#define pii pair<int, int>
#define pb push_back
#define all(x) x.begin(), x.end()
#define pv(x) for (auto i : x) cout << i << ' '; cout << endl;
#define vini(x, y) for (int i = 0; i < y; i++) cin >> x[i];
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a * (b / gcd(a,b)))
#define countonbit(a) __builtin_popcountll(a)

using namespace std;

void solve()
{
	int a; cin >> a;
	int counter = 0;
	vector <int> arr(a), key(a);
	vini(arr, a); vini(key, a);
	vector <pii> arr2(a);
	for (int i = 0; i < a; i++) arr2[i] = {arr[i], i};	
	sort(all(arr2));
	
	bool ok = false;
//	for (int i = 0; i < a - 1; i++)
//	{
//		if (key[i] != key[i + 1]) ok = false;
//	}
	if (ok)
	{
		int k = key[0];
		for (int i = 0; i < a; i++)
		{
			if (arr[i] == k)
			{
				for (int j = i - 1; j >= 0; j--)
				{
					if (arr[j] > arr[i]) break;
					arr[j] = arr[i];
				}
				
				for (int j = i + 1; j < a; j++)
				{
					if (arr[j] > arr[i]) break;
					arr[j] = arr[i];
				}
			}
		}
	}
	else
	{
		for (int i = 0; i < a; i++)
		{
			int ind = arr2[i].se;
			int left = ind, right = ind;
			int h = arr2[i].fi;
			
			int lg = 0, rg = 0;
			for (int j = ind - 1; j >= 0; j--)
			{
				if (arr[j] > h) break;
				left = j;
				lg += arr[j] == key[j];
			}
			
			for (int j = ind + 1; j < a; j++)
			{
				if (arr[j] > h) break;
				right = j;
				rg += arr[j] == key[j];
			}
			
			// LEFT
			int mostl = 0, lefttill = ind;
			int g = 0, templ = lg;
			for (int j = ind - 1; j >= left; j--)
			{
				if (arr[j] == key[j]) templ--;
				if (key[j] == h) g++;
				if (g + templ > lg)
				{
					if ((g + templ) - lg > mostl)
					{
						mostl = (g + templ) - lg;
						lefttill = j;
					}
				}
			}
			for (int j = ind; j >= lefttill; j--) arr[j] = h;
	
			// RIGHT
			int mostr = 0, righttill = ind;
			g = 0;
			int tempr = rg;
			for (int j = ind + 1; j <= right; j++)
			{
				if (arr[j] == key[j]) tempr--;
				if (key[j] == h) g++;
				if (g + tempr > rg)
				{
					if ((g + tempr) - rg > mostr)
					{
						mostl = (g + tempr) - lg;
						righttill = j;
					}
				}
			}
			
			for (int j = ind; j <= righttill; j++) arr[j] = h;
		}
	}
	
	for (int i = 0; i < a; i++) counter += arr[i] == key[i];
	
	cout << counter << endl;
}

int32_t main()
{
 	ios::sync_with_stdio(false); cin.tie(NULL);

	int a = 1;
	//cin >> a;
	while(a--) solve();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 74 ms 972 KB Output is correct
3 Execution timed out 1052 ms 3028 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 1 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 11 ms 1492 KB Output is correct
3 Correct 26 ms 3412 KB Output is correct
4 Correct 33 ms 3436 KB Output is correct
5 Execution timed out 1032 ms 3412 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Incorrect 1 ms 212 KB Output isn't correct
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Incorrect 1 ms 212 KB Output isn't correct
9 Halted 0 ms 0 KB -