Cod sursa(job #2344963)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 15 februarie 2019 19:19:44
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;
int N, i, A[100005], K, F = 1, cnt = 1, Ans[100005], Poz, Max, j;
pair <int, int> B[50005];
int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &N);
    for(i = 1; i <= N; i++) scanf("%d", &A[i]);
    for(i = 2; i <= N; i++) {
        if(A[i] >= A[i - 1]) ++cnt;
        else {
            if(cnt > 1) B[++K].first = F, B[K].second = i - 1, cnt = 1;
            F = i;
        }
    }
    if(cnt > 1) B[++K].first = F, B[K].second = i - 1, cnt = 1;
    for(i = 1; i <= K; i++) {
        cnt = 1;
        for(j = B[i].first; j < B[i].second; j++) if(A[j] < A[j + 1]) ++cnt;
        if(A[j] == A[j - 1] && A[j] != A[B[i].first]) ++cnt;
        if(cnt > Max) Max = cnt, Poz = i;
    }
    printf("%d\n", Max);
    for(i = B[Poz].first; i < B[Poz].second; i++) if(A[i] < A[i + 1]) printf("%d ", A[i]);
    printf("%d", A[i]);
    return 0;
}