Submission #1333529

#TimeUsernameProblemLanguageResultExecution timeMemory
1333529Faisal_SaqibMeetings (IOI18_meetings)C++20
19 / 100
5591 ms4132 KiB
#include "meetings.h"
using namespace std;
typedef long long ll;
std::vector<long long> minimum_costs(std::vector<int> h, std::vector<int> l,
                                     std::vector<int> r) {
  int n=h.size(),q=l.size(),mx=2;
  for(int i=0;i<n;i++)
  {
    mx=max(mx,h[i]);
  }
  // if(mx==2)
  // {
  //   // find max elemtn between two occurences between
  // }

  vector<ll> fnl(q);
  vector<ll> cst(n+2,0);
  for(int i=0;i<q;i++)
  {
    int ql=l[i],qr=r[i];
    vector<int> c;
    ll ans=0;
    for(int x=ql;x<=qr;x++)    
    {
      while(c.size()>0 and h[c.back()]<=h[x])
      {
        int z=c.back();
        c.pop_back();
        ans-=1ll*(z-((c.size()>0)?(c.back()):(ql-1)))*h[z];
      }
      int z=x;
      ans+=1ll*(z-((c.size()>0)?(c.back()):(ql-1)))*h[z];
      c.push_back(x);
      cst[x]=ans;
    }
    ans=0;
    ll mi=1e18;
    c.clear();
    for(int x=qr;x>=ql;x--)
    {
      while(c.size()>0 and h[c.back()]<=h[x])
      {
        int z=c.back();
        c.pop_back();
        ans-=1ll*(((c.size()>0)?(c.back()):(qr+1))-z)*h[z];
      }
      int z=x;
      ans+=1ll*(((c.size()>0)?(c.back()):(qr+1))-z)*h[z];
      c.push_back(x);
      mi=min(mi,cst[x]+ans-h[x]);
    }
    fnl[i]=mi;
  }
  return fnl;
}
#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...