Submission #920913

#TimeUsernameProblemLanguageResultExecution timeMemory
920913danikoynovDetecting Molecules (IOI16_molecules)C++14
0 / 100
1 ms604 KiB
#include "molecules.h"
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 2e5 + 10;

int n;
vector < pair < ll, int > > values;
ll pref[maxn];
ll get_pref(int l, int r)
{
    ll val = pref[r];
    if (l != 0)
        val -= pref[l - 1];
    return val;
}

std::vector<int> find_subset(int l, int u, std::vector<int> w)
{
    n = w.size();
    for (int i = 0; i < n; i ++)
    {
        values.push_back({w[i], i});
    }
    sort(values.begin(), values.end());
    for (int i = 0; i < n; i ++)
    {
        if (i != 0)
            pref[i] = pref[i - 1];
        pref[i] += values[i].first;
    }

    for (int len = 1; len <= n; len ++)
    {
        ll bot = get_pref(0, len - 1);
        ll top = get_pref(n - len, n - 1);
        if (bot > u)
        {
            vector < int > res;
            return res;
        }

        if (bot >= l)
        {
            vector < int > res;
            for (int i = 0; i < len; i ++)
                res.push_back(values[i].second);
            return res;
        }

        if (top >= l)
        {
            ll sum = bot;
            int pt = len;
            while(pt < n)
            {
                sum += values[pt].first;
                sum -= values[pt - len].first;
                if (sum >= l)
                {
                    vector < int > res;
                    for (int i = pt - len + 1; i <= pt; i ++)
                        res.push_back(values[i].second);
                    return res;
                }
                pt ++;
            }
            assert(false);
        }
    }

    assert(false);
    return std::vector<int>(0);
}
#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...