summaryrefslogtreecommitdiff
path: root/I_anno/Programmazione_2/coding_contest/tastevin_paths.cpp
blob: eb7da546dde7be01fc6b3f77e13a85aecfad84db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// It prints all possible paths

#include<iostream>
#include<fstream>
#include<vector>

using namespace std;

int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");

    for(int ts = 0; ts < 100; ++ts) {
        int N;
        in >> N;
        vector<int> arr;
        int e;
        for(int i = 0; i < N; ++i) {
            in >> e;
            arr.push_back(e);
        }

        int max_value{};
        int value;

        for(int i = 0; i < N; ++i) {
            vector<int> tmp;
            tmp.push_back(i);
            value = arr[i];
            for(int j = i+2; j < N; ++j) {
                if(arr[j] >= value) {
                    tmp.push_back(j);
                    value = arr[j];
                    ++j;
                }
            }
            while(!tmp.empty()) {
                if(tmp.size() > max_value) {
                    for(auto const&i : tmp) {
                        cout << i << ' ';
                    }
                    cout << endl;
                    max_value = tmp.size();
                }
                int k = tmp.back();
                tmp.pop_back();
                if(tmp.size() > 0)
                    value = arr[tmp.back()];
                else
                    value = arr[k];
                for(int j = k+1; j < N; ++j) {
                    if(arr[j] >= value) {
                        value = arr[j];
                        tmp.push_back(j);
                        ++j;
                    }
                }
            }
        }

        out << max_value << '\n';
    }

    in.close();
    out.close();
    return 0;
}