Submission #1032803

#TimeUsernameProblemLanguageResultExecution timeMemory
1032803parsadox2Meetings (IOI18_meetings)C++17
19 / 100
5537 ms6220 KiB
#include <bits/stdc++.h>
#include "meetings.h"

#pragma GCC optimize("Ofast,O3,unroll-loops")
#pragma gCC target("avx2")

using namespace std;

const int N = 1e5 + 10;
int mxl[N] , mxr[N] , a[N] , n , q;
long long dpl[N] , dpr[N];

long long Solve(int l , int r)
{
	for(int i = l ; i <= r ; i++)
	{
		dpl[i] = (mxl[i] < l ? 1LL * (i - l + 1) * a[i] : 1LL * (i - mxl[i]) * a[i] + dpl[mxl[i]]);
	}
	for(int i = r ; i >= l ; i--)
	{
		dpr[i] = (mxr[i] > r ? 1LL * (r - i + 1) * a[i] : 1LL * (mxr[i] - i) * a[i] + dpr[mxr[i]]);
	}
	long long res = dpl[l] + dpr[l] - a[l];
	for(int i = l + 1 ; i <= r ; i++)
		res = min(res , dpl[i] + dpr[i] - a[i]);
	return res;
}

vector <long long> minimum_costs(vector <int> H , vector <int> L , vector <int> R)
{
	n = H.size();
	q = L.size();
	for(int i = 0 ; i < n ; i++)
		a[i] = H[i];
	vector <int> st;
	for(int i = 0 ; i < n ; i++)
	{
		mxl[i] = -1;
		while(!st.empty())
		{
			if(a[i] >= a[st.back()])
				st.pop_back();
			else
			{
				mxl[i] = st.back();
				break;
			}
		}
		st.push_back(i);
	}
	st.clear();
	for(int i = n - 1 ; i >= 0 ; i--)
	{
		mxr[i] = n + 1;
		while(!st.empty())
		{
			if(a[i] >= a[st.back()])
				st.pop_back();
			else
			{
				mxr[i] = st.back();
				break;
			}
		}
		st.push_back(i);
	}
	vector <long long> res(q);
	for(int i = 0 ; i < q ; i++)
		res[i] = Solve(L[i] , R[i]);
	return res;
}

Compilation message (stderr)

meetings.cpp:5: warning: ignoring '#pragma gCC target' [-Wunknown-pragmas]
    5 | #pragma gCC target("avx2")
      |
#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...