Pagini recente » Cod sursa (job #397695) | Cod sursa (job #2958928) | Cod sursa (job #2709526) | Cod sursa (job #1191428) | Cod sursa (job #1254324)
#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;
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)
{
d[i] = d[best[lbest - 1]];
best[lbest] = i;
lbest++;
}
else
{
d[i] = d[best[aux]];
best[aux] = i;
}
}
out<<lbest - 1<<'\n';
for(int i = 1; i<=lbest - 1; i++)
out<<v[best[i]]<<' ';
return player_unu;
}