Cod sursa(job #2862088)

Utilizator MokaDomos Mozes Moka Data 4 martie 2022 21:14:30
Problema Subsir crescator maximal Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
using namespace std;
struct elozo{
    int szam;
    int sorszam;
    int index;
};
struct CompareHeight {
    bool operator()(elozo const& p1, elozo const& p2)
    {
        return p1.sorszam < p2.sorszam;
    }
};
priority_queue<elozo,vector<elozo>,CompareHeight> p,q;
ifstream f("scmax.in");
ofstream g("scmax.out");
vector<int>v;
elozo l;
vector<int>kiir;
int beff[100001];
bool numbers[100001];
int maxmplace;
int maxmindex;
int main()
{
    int n;
    f>>n;
    int a;
    f>>a;
    l.index=0;
    l.sorszam=0;
    l.szam=a;
    v.push_back(a);
    p.push(l);
    for (int i=1; i<n; i++)
    {
        int a;
        f>>a;
        l.index=i;
        l.sorszam=0;
        l.szam=a;
        v.push_back(a);
        q=p;
        bool didit=true;
        while (!q.empty() && didit) {
        elozo l2 = q.top();
        q.pop();
        if(l2.szam<l.szam && l.sorszam-1<l2.sorszam){
            didit=false;
            l.sorszam=l2.sorszam+1;
            beff[l.index]=l2.index;
        }
    }
    p.push(l);
    }
    f.close();
    for (int i=0;i<n;i++){
        cout<<beff[i]<<" ";
    }
    cout<<endl;
    int maxmplace=p.top().sorszam;
    g<<++maxmplace;
    g<<endl;
    maxmindex=p.top().index;
    kiir.push_back(v[maxmindex]);
    if(maxmindex>0){
    while(maxmindex!=0){
        maxmindex=beff[maxmindex];
        kiir.push_back(v[maxmindex]);
    }
    }
    while (!kiir.empty()){
        g<<kiir.back()<<" ";
        kiir.pop_back();
    }
    g.close();
    return 0;
}