Cod sursa(job #2113757)

Utilizator armigheGheorghe Liviu Armand armighe Data 25 ianuarie 2018 00:15:37
Problema Schi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
#include<fstream>
#include<set>
using namespace std;
FILE *f=fopen("schi.in","r");
ofstream g("schi.out");

struct concurent
{
    int poz,cand;
};

inline bool cmp(const concurent &a,const concurent &b)
{
    if(a.poz==b.poz)
        return a.cand>b.cand;
    return a.poz<b.poz;
}

set<concurent,  bool(*)(const concurent&,const concurent&)>s(cmp);
concurent add[30002],sters[30002];
int main()
{
    int n,i,a,k,j;
    set<concurent>::iterator it,start;
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&a);
        start=s.upper_bound(concurent{a,n+1});
        k=0;
        for(it=start;it!=s.end();it++)
        {
            add[++k].poz=it->poz+1;
            add[k].cand=it->cand;
            sters[k].poz=it->poz;
            sters[k].cand=it->cand;
            //s.erase(*it);
            //s.insert(add);
        }
        for(j=1;j<=k;j++)
            s.erase(sters[j]);
        for(j=1;j<=k;j++)
            s.insert(add[j]);
        s.insert(concurent{a,i});
    }
    for(it=s.begin();it!=s.end();it++)
        g<<it->cand<<'\n';
    return 0;
}