Cod sursa(job #2465027)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 29 septembrie 2019 12:31:16
Problema Secv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstdio>

using namespace std;
 
ifstream fin("secv.in");
ofstream fout("secv.out");
 
int n;
vector<int> fatman, tsarbomba;
 
void projectmanhattan(){
    tsarbomba = fatman;
    sort(tsarbomba.begin(), tsarbomba.end());
    for(int i = n-1; i >= 0; i--){
        if(tsarbomba[i] == tsarbomba[i-1]){
            tsarbomba.erase(tsarbomba.begin()+i);
        }
    }
}
 
int s = -1;
void updates(int a){
    if(s == -1){
        s = a;
    }else{
        s = min(s, a);
    }
}

void idk(int p){
    int tsi = 0, tsn = tsarbomba.size();
    int en;
    for(int i = p; i < n; i++){
        if(tsi != tsn && fatman[i] == tsarbomba[tsi]){
            tsi++;
            en = i;
        }
    }
 
    if(tsi == tsn){
        updates(en-p+1);
    }
}

int suckmyass[5041];
void depression(){
    bool ok = false;
    for(int i = 0; i < n; i++){
        if(fatman[i] == tsarbomba[0]){
            ok = true;
        }
        if(ok){
            suckmyass[i] = 1;
        }
    }
    int prev = suckmyass[0], aux;
    for(int i = 1; i < tsarbomba.size(); i++){
        ok = false;
        for(int j = 1; j < n; j++){
            if(fatman[j] == tsarbomba[i]){
                ok = true;
            }
            aux = suckmyass[j];
            if(ok && suckmyass[j-1] > 0){
                suckmyass[j] = prev+1;
            }else{
                suckmyass[j] = 0;
            }
            prev = aux;
        }
    }
    for(int i = 0; i < n; i++){
        if(suckmyass[i] != 0){
            updates(suckmyass[i]);
        }
    }
}
 
int main(){
    fin >> n;
    for(int i = 0; i < n; i++){
        int a;fin >> a;
        fatman.push_back(a);
    }
    projectmanhattan();
    depression();
    printf("%d\n", s);
    return 0;
}