Pagini recente » Cod sursa (job #1390279) | Cod sursa (job #3222496) | Cod sursa (job #1042260) | Cod sursa (job #2328885) | Cod sursa (job #2142999)
#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;
}
}