Cod sursa(job #2924120)

Utilizator DariusJKDarius Alupoaie DariusJK Data 25 septembrie 2022 20:39:05
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.09 kb
#include <bits//stdc++.h>
using namespace std;
int a[10001];
int f[30001];
void citire(int& n, int a[]){
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> a[i];
}
void insula(int n, int a[], int& st, int& dr){
    int l = 1, lmax = 0;
    st = 0, dr = 0;
    for(int i = 1; i <= n; ++i){
        if(a[i] != 0) {
        l++;
        if(l > lmax) lmax = l, st = i - l + 2, dr = i;
    }else l = 1;
    }
    if(st != 0 && dr != 0) cout << st << " " << dr << '\n';
    else cout << "Nu exista insule";

}
void munte(int n, int a[], int st, int dr){
    int maxi = 0, cp;
    bool p = true;
    if(st == 0 && dr == 0) cout << "Nu este munte";
    else {
        for(int i = st; i <= dr; ++i) if(a[i] > maxi) maxi = a[i], cp = i;
        for(int i = st; i <= dr; ++i) {
            if(i < cp - 1) {
            if(a[i] >= a[i+1]) p = false;
        }else{
            if(a[i] == maxi && a[i+1] == 0) p = false;
            else if(a[i] > a[i+1]) p = true;
            else p = false;
        }
    }
    if(p) cout << "Este munte" << '\n';
    else cout << "Nu este munte" << '\n';
    }
}
bool distincte(int n, int a[], int& maxi1, int& mini1){
     maxi1 = 0, mini1 = 300001;
    for(int i = 1; i <= n; ++i) {
        if(a[i] < mini1 && a[i] != 0) mini1 = a[i];
        if(a[i] > maxi1) maxi1 = a[i];
        f[a[i]]++;
    }
    bool p = true;
    for(int i = mini1; i <= maxi1; ++i) {
        if(f[i] != 1 || f[i] != 0) {
            p = false;
            break;
        }
    }
    if(p) {
        cout << "Altitudinile sunt distincte";
        return true;
    }else{
        cout << "Altitudinile nu sunt distincte" << '\n';
        return false;
    }
}

void frecventa(int n, int a[], int maxi1, int mini1){
    int maxi2 = 0, cp1;
    for(int i = mini1; i <= maxi1; ++i) {
        if(f[i] > maxi2) maxi2 = f[i], cp1 = i;
    }
    cout << cp1 << " " << maxi2;
}

int main()
{
    int n, st, dr, maxi1, mini1;
    citire(n, a);
    insula(n, a, st, dr);
    munte(n, a, st, dr);
    if(!distincte(n, a, maxi1, mini1)) frecventa(n, a, maxi1, mini1);


}