Pagini recente » Cod sursa (job #1701912) | Borderou de evaluare (job #3032249) | Cod sursa (job #1806735) | Cod sursa (job #2433541) | Cod sursa (job #1254348)
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int nmax = 100006;
int n, v[nmax], d[nmax], best[nmax], lbest = 1, duv[nmax];
int bs(int x)
{
int hi = lbest, lo = 0, mid = 0;
while(hi - lo>1)
{
mid = (hi + lo) / 2;
if(v[best[mid]]>=x && x>v[best[mid - 1]])
return mid;
if(v[best[mid]]>=x)
hi = mid;
else
lo = mid;
}
if(v[best[mid]]>=x && x>v[best[mid - 1]])
return mid;
if(v[best[lo]]>=x && x>v[best[lo - 1]])
return lo;
if(v[best[hi]]>=x && x>v[best[hi - 1]])
return hi;
return -1;
}
int main(){
int player_unu=0;
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
int aux = bs(v[i]);
if(aux==-1)
{
best[lbest] = i;
duv[i] = best[lbest - 1];
lbest++;
}
else
{
best[aux] = i;
duv[i] = best[aux - 1];
}
}
out<<lbest - 1<<'\n';
int ceafisam = best[lbest - 1];
for(int i = 1; i<=lbest - 1; i++)
{
d[i] = v[ceafisam];
ceafisam = duv[ceafisam];
}
for(int i = lbest - 1; i>=1; i--)
out<<d[i]<<' ';
return player_unu;
}