Mai intai trebuie sa te autentifici.
Cod sursa(job #1328592)
Utilizator | Data | 28 ianuarie 2015 16:19:08 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.14 kb |
/// scmax
#include <iostream>
#include <fstream>
#define inf (1<<30)+100
#define NMax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int A[NMax];
int best[NMax];
int prev[NMax];
void solve() {
for (int i=1;i<=n;i++) {
best[i] = inf;
prev[i] = -1;
}
best[0] = -1;
prev[0] = -1;
for (int i=1;i<=n;i++) {
int x = A[i];
int left = 0, right = i+1;
while (right-left-1) {
int mij = (left+right)/2;
if (best[mij] < x)
left = mij;
else
right = mij;
}
if (best[right] > x) {
best[right] = x;
}
}
int left = 0, right = n+1;
while (right-left-1) {
int mij = (left+right)/2;
if (best[mij] < inf)
left = mij;
else
right = mij;
}
int len = left;
g<<len<<'\n'; /// Primul raspuns
}
void read() {
f>>n;
for (int i=1;i<=n;i++)
f>>A[i];
}
int main() {
read();
solve();
f.close(); g.close();
return 0;
}