Pagini recente » Cod sursa (job #1337080) | Cod sursa (job #689789) | Cod sursa (job #1090913) | Cod sursa (job #441739) | Cod sursa (job #708804)
Cod sursa(job #708804)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define MAXN 100005
#define zeros(x) (x^(x-1))&x
ifstream fin("scmax.in");
ofstream fout("scmax.out");
struct nod{
int val;
int poz;
};
bool comp(nod a, nod b) {
return (a.val<b.val);
}
nod a[MAXN],aux;
int v[MAXN],n,i,j,k,aib[MAXN],maxim,pozmax,dela[MAXN],ax;
void citire() {
fin>>n;
for(i=1;i<=n;i++) {
fin>>a[i].val;
a[i].poz=i;
}
}
void upd(int val, int poz) {
ax=poz;
for(;poz<=n;poz+=zeros(poz)) {
if (val>aib[poz]) {
aib[poz]=val;
dela[poz]=ax;
}
}
}
int cauta(int poz) {
int rez=0;
for(;poz>0;poz-=zeros(poz)) {
rez=max(rez,aib[poz]);
}
return rez;
}
int main() {
citire();
sort(a+1,a+n+1,comp);
j=0;
a[0].val=-999999999;
for(i=1;i<=n;i++) {
if (a[i].val!=a[i-1].val) j++;
v[a[i].poz]=j;
}
aib[0]=0;
for(i=1;i<=n;i++) {
k=cauta(v[i]-1);
k++;
upd(k,v[i]);
if (k>maxim) {
maxim=k;
pozmax=i;
}
}
fout<<maxim<<"\n";
cout<<pozmax;
fout.close();
return 0;
}