Cod sursa(job #2533739)

Utilizator neagamariaMaria Neaga-Budoiu neagamaria Data 29 ianuarie 2020 17:24:49
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("compact.in");
ofstream out("compact.out");

int v[1000000],m[1000000], M[1000000];
int vf1,vf2,n,cnt;

int main()
{
  in>>n;
  int i;
  for(i=1;i<=n;i++)
  {
      in>>v[i];

      while(v[i]<v[m[vf1]] && vf1>0)
      {
          vf1--;
      }
      while(v[i]>v[M[vf2]] && vf2>0)
      {
          vf2--;
      }

          vf1++;
          m[vf1]=i;

          vf2++;
          M[vf2]=i;

 if(vf1>1)
 {
     int st=1,dr=vf1-1,mij;
     while(st<=dr)
     {
         mij=(st+dr)/2;
         if(m[mij]<=M[vf2-1])
         {
             st=mij+1;
         }
         else
            dr=mij-1;
     }
     cnt+=vf1-st;
     if(vf1>st && m[vf1-1]==i-1)
     {
         cnt--;
     }
 }

  }
  out<<cnt<<endl;
  /*for(i=1;i<=vf1;i++)
    cout<<m[i].nr<<" ";
  cout<<endl;
{1}
  for(i=1;i<=vf2;i++)
    cout<<M[i].nr<<" ";
    */

    return 0;
}