이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "meetings.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pi;
typedef vector<ll> vi;
typedef vector<pi> vpi;
#define mp make_pair
#define pb emplace_back
#define f first
#define s second
#define ALL(x) x.begin(),x.end()
#define SZ(x) (ll)x.size()
ll A[5010];
struct SparseTable{
ll N,K;
vector<vpi> ST;
SparseTable(ll _N){
N=_N;K=MSB(N);
ST.resize(K);
for (ll i=0;i<N;++i)ST[0].pb(mp(i,A[i]));
for (ll k=1;k<K;++k){
for (ll i=0;i+(1<<k)<=N;++i){
if (ST[k-1][i].s > ST[k-1][i+(1<<(k-1))].s){
ST[k].pb(ST[k-1][i]);
}
else ST[k].pb(ST[k-1][i+(1<<(k-1))]);
}
}
}
inline int MSB(unsigned int x){return 32-__builtin_clz(x);}
pi query(ll x, ll y){
ll k = MSB(y-x+1)-1;
if (ST[k][x].s > ST[k][y-(1<<k)+1].s)return ST[k][x];
return ST[k][y-(1<<k)+1];
}
}*S;
ll memo[5010][5010];
ll ask(ll x, ll y){
if (memo[x][y] != -1)return memo[x][y];
if (x==y)return memo[x][y] = A[x];
pi tall = S->query(x,y);
// cout<<"Tall "<<tall.f<<' '<<tall.s<<'\n';
// Answer is on one side of tall
if (tall.f == x){
return memo[x][y] = A[x] + ask(x+1,y);
}
if (tall.f == y){
return memo[x][y] = A[y] + ask(x,y-1);
}
ll l = ask(x,tall.f-1);
ll r = ask(tall.f+1,y);
ll ld = tall.f-x+1;
ll rd = y-tall.f+1;
return memo[x][y] = min(ld*tall.s+r, rd*tall.s+l);
}
ll N,Q;
std::vector<long long> minimum_costs(std::vector<int> H, std::vector<int> L,
std::vector<int> R) {
N = SZ(H);
Q = SZ(L);
std::vector<long long> C(Q);
for (ll j = 0; j < Q; ++j) {
C[j] = -1;
}
if (Q <= 5000){
for (ll i=0;i<N;++i)A[i]=H[i];
S = new SparseTable(N);
memset(memo,-1,sizeof(memo));
for (ll i=0;i<Q;++i){
C[i] = ask(L[i],R[i]);
}
}
return C;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |