Pagini recente » Cod sursa (job #2067800) | Cod sursa (job #1665308) | Cod sursa (job #2671895) | Cod sursa (job #641432) | Cod sursa (job #966689)
Cod sursa(job #966689)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("move.in");
ofstream g("move.out");
struct ArrMax{
int pred;
int best_size;
};
ArrMax DP[100002];
int N,Arr[100002];
bool result[100002];
void read()
{
int i;
f>>N;
for(i=1;i<=N;i++)
{
f>>Arr[i];
}
}
void scmax()
{
int i,max_best=-1,poz_best=-1;
DP[1].pred=0;
DP[1].best_size=1;
for(i=2;i<=N;i++)
{
int j=i-1,max=-1;
while(j>=1)
{
if(Arr[j]<Arr[i])
{
if(max<DP[j].best_size+1)
{
max=DP[j].best_size+1;
DP[i].best_size=DP[j].best_size+1;
DP[i].pred=j;
}
}
j--;
}
if(max_best<max)
{
max_best=max;
poz_best=i;
}
}
i=poz_best;
int k=0,counter=0;
result[0]=1;
while(i!=0)
{
result[i]=1;
i=DP[i].pred;
counter++;
}
g<<N-counter<<"\n";
}
/*int binary_search(int val)
{
int mid,st=1,dr=N,poz;
while(st<=dr)
{
mid=(st+dr)/2;
if(Arr2[mid]==val)
{
poz=mid;
break;
}
if(Arr2[mid]>val)
dr=mid-1;
if(Arr2[mid]<val)
st=mid+1;
}
return(poz);
}*/
void Solve()
{
int i=0,pozition,j=1;
for(i=1;i<=N;i++)
if(result[i]==0)
{
while(Arr[i]-j>0)
{
if(result[Arr[i]-j]==1)
{
g<<Arr[i]<<" "<<Arr[i]-j<<"\n";
break;
}
j++;
}
if(Arr[i]-j==0)
g<<Arr[i]<<" "<<0<<"\n";
result[i]=1;
}
}
int main()
{
read();
scmax();
Solve();
return 0;
}