Cod sursa(job #1645063)
| Utilizator | Data | 10 martie 2016 10:51:52 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.85 kb |
#include <fstream>
#include <iostream>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,v[DIM];
int w[DIM],t[DIM];
int nr;
void drum(int x){
if(t[x])
drum(t[x]);
fout << v[x] << " ";
}
int main(){
fin >> N;
for(int i=1;i<=N;i++){
fin >> v[i];
if(v[i]>v[w[nr]])
w[++nr]=i,t[i]=w[nr-1];
else{
int p=1;
int u=nr;
while(p<=u){
int mid=(p+u)>>1;
if(v[i]>v[w[mid]])
p=mid+1;
else
u=mid-1;
}
p--;
if(v[i]>v[w[p]]){
w[p+1]=i;
t[i]=w[p];
}
}
}
fout << nr << "\n";
drum(w[nr]);
}
