Cod sursa(job #2142999)

Utilizator Monstergentleman35Ciopraga Razvan Monstergentleman35 Data 25 februarie 2018 14:21:18
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("calcule.in");
ofstream fout("calcule.out");

int n,q,V[100005],i,lgc,lgp,F;
int Aux[100005];
int Recon[100005];
int P[100005];
int Poz[100005];

int SubsirMaximal();
bool CautBin(int);

int main()
{
 fin>>n>>q;
 for (i=1;i<=n;i++)
 {
  fin>>V[i];
  Aux[i]=V[i];
 }
 while (SubsirMaximal()>0)
  F++;
 fout<<F;
 return 0;
}

int SubsirMaximal()
{
 int i2,j2;
 for (i2=1;i2<=lgc;i2++)
  Recon[i2]=0;
 for (i2=1;i2<=lgp;i2++)
  P[i2]=0;
 lgp=0;
 lgc=0;
 for (i2=1;i2<=n;i2++)
 {
  if (V[i2]!=9999999)
  {
   if (!CautBin(i2))
   {
    lgc++;
    Recon[lgc]=V[i2];
    lgp++;
    P[lgp]=lgc;
    Poz[lgp]=i2;
   }
  }
 }
 j2=lgp;
 cout<<lgp<<"\n";
 cout<<" ";
 for (i2=lgc;i2>0;i2--)
 {
  while (P[j2]!=i2)
   j2--;
  cout<<V[Poz[j2]]<<" "<<"a"<<Poz[j2]<<" ";;
  V[Poz[j2]]=9999999;
 }
 cout<<"\n";
 cout<<lgc<<"\n";
 return lgc;
}

bool CautBin(int x)
{
 int st,sf,mij,poz1;
 st=1;
 sf=lgc;
 poz1=0;
 mij=(st+sf)/2;
 while (st<=sf)
 {
  if (Recon[mij]>=V[x])
  {
   poz1=mij;
   lgp++;
   P[lgp]=mij;
   Poz[lgp]=x;
   sf=mij-1;
  }
  else
   st=mij+1;
  mij=(st+sf)/2;
 }
 if (poz1==0)
  return 0;
 else
 {
  Recon[poz1]=V[x];
  return 1;
 }
}