제출 #291513

#제출 시각아이디문제언어결과실행 시간메모리
291513TheLorax모임들 (IOI18_meetings)C++11
0 / 100
5560 ms2296 KiB
#include <bits/stdc++.h>
#include "meetings.h"

#define F first
#define S second
#define SZ(a) ((int)(a).size())
#define PB push_back
#define ALL(a) (a).begin(), (a).end()

using namespace std;

typedef long long ll;
typedef pair<ll, ll> ii;

std::vector<ll> mxh;
int np2;

ll mxque(int a, int b, int i=0, int j=np2, int h=1){
  if(a<=i && j<=b)
    return mxh[h];
  if(j<=a || b<=i)
    return 0;
  return max(mxque(a,b,i,(i+j)/2,h*2),mxque(a,b,(i+j)/2,j,h*2+1));
}


std::vector<long long> minimum_costs(std::vector<int> h, std::vector<int> l, std::vector<int> r) {
  int q = SZ(l), n=SZ(h);
  np2=1<<(32-__builtin_clz(n));
  mxh.clear();
  mxh.resize(np2*2,0);
  for(int i=0; i<n; i++)
    mxh[i+np2]=h[i];
  for(int i=np2-1; i>0; i--)
    mxh[i]=max(mxh[2*i],mxh[2*i+1]);
  // for(ll x: mxh)
  //   fprintf(stderr, "%lld\n", x);
  std::vector<long long> c(q);
  for(int i=0; i<q; i++){
    c[i]=LLONG_MAX;
    for(int j=l[i]; j<=r[i]; j++){
      ll t=0;
      for(int k=l[i]; k<=r[i]; k++){
        t+=mxque(min(k,j),max(k,j)+1);
        // fprintf(stderr, "%lld %d %d\n", t, j, k);
      }
      c[i]=min(c[i],t);
    }
  }
  return c;
}
#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...