Cod sursa(job #3133387)

Utilizator gabi2411rosu gabriel gabi2411 Data 25 mai 2023 15:06:23
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.91 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("roata.in");
ofstream fout("roata.out");
const short Nmax = 360;
const int Vmax = 100000, Pmax = 100000;

short n, pos;
int p, v[Nmax], crt, valmin, ind[Nmax], ord[Pmax], ordcrt;
long long sumt;
int main()
{
    fin >> n >> p;
    if (p < n) {
        for (short i = 0; i < p; i++) {
            fin >> v[i];
            ind[i] = i + 1;
            sumt += v[i];
        }
        for (short i = p; i < n; i++) {
            v[i] = Vmax + 1;
        }
    }
    else {
        for (short i = 0; i < n; i++) {
            fin >> v[i];
            ind[i] = i + 1;
            sumt += v[i];
        }
        crt = n;
        while (crt < p) {
            valmin = Vmax + 1;
            for (short j = 0; j < n; j++) {
                if (v[j] < valmin)
                    valmin = v[j];
            }
            for (short j = 0; j < n; j++) {
                v[j] -= valmin;
                if (v[j] == 0) {
                    ord[ordcrt++] = ind[j];
                    if (crt < p) {
                        fin >> v[j];
                        sumt += v[j];
                        ind[j] = (++crt);
                    }
                    else v[j] = Vmax + 1;
                }
            }
        }
    }
    fout << sumt << '\n';
    int lc;
    while (valmin != Vmax + 1) {
        valmin = Vmax + 1;
        for (short j = 0; j < n; j++) {
            if (v[j] < valmin)
                valmin = v[j];
        }
        if (valmin != Vmax + 1) {
            for (short j = 0; j < n; j++) {
                if (v[j] == valmin) {
                    lc = j + 1;
                    v[j] = Vmax + 1;
                    ord[ordcrt++] = ind[j];
                }
            }
        }
    }
    for (int i = 0; i < p; i++)
        fout << ord[i] << ' ';
    fout << '\n' << lc;

    return 0;
}