Submission #1326069

#TimeUsernameProblemLanguageResultExecution timeMemory
1326069SSKMFDetecting Molecules (IOI16_molecules)C++20
100 / 100
34 ms5276 KiB
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;

vector <int> find_subset (int minim , int maxim , vector <int> sir)
{
    vector < pair <int , int> > copie(sir.size());
    for (int indice = 0 ; indice < (int)sir.size() ; indice++)
        { copie[indice] = {sir[indice] , indice}; }

    sort(copie.begin() , copie.end());

    vector <int64_t> prefix((int)copie.size() + 1);
    for (int indice = 1 ; indice <= (int)copie.size() ; indice++)
        { prefix[indice] = prefix[indice - 1] + copie[indice - 1].first; }

    for (int luat = (int)copie.size() ; luat && prefix.back() - prefix[(int)copie.size() - luat] >= minim ; luat--) {
        if (prefix[luat] <= maxim)
        {
            int stanga = 0 , dreapta = luat;
            while (stanga <= dreapta)
            {
                const int candidat = (stanga + dreapta) >> 1;
                if (prefix[candidat] + prefix.back() - prefix[(int)copie.size() - (luat - candidat)] <= maxim)
                    { dreapta = candidat - 1; }
                else
                    { stanga = candidat + 1; }
            }

            if (prefix[stanga] + prefix.back() - prefix[(int)copie.size() - (luat - stanga)] >= minim)
            {
                vector <int> rezultat;
                for (int indice = 0 ; indice < stanga ; indice++)
                    { rezultat.push_back(copie[indice].second); }
                for (int indice = (int)copie.size() - (luat - stanga) ; indice < (int)copie.size() ; indice++)
                    { rezultat.push_back(copie[indice].second); }

                return rezultat;
            }
        }
    }

    return vector <int> (0);
}

Compilation message (stderr)

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...