제출 #711925

#제출 시각아이디문제언어결과실행 시간메모리
711925bin9638Detecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms212 KiB
#include <bits/stdc++.h>

#ifndef SKY
#include "molecules.h"
#endif // SKY

using namespace std;

#define ll long long
#define pb push_back
#define N 200010
#define ii pair<ll,int>
#define fs first
#define sc second

ll L,R;
vector<ll>a;
int ktr[N],n;
set<ii>s;

vector<int> find_subset(int l, int u, vector<int> w)
{
    n=w.size();
    for(auto u:w)
        a.pb(u);
    sort(a.begin(),a.end());
    ll sum=0;
    L=l;R=u;
    for(int i=0;i<n;i++)
    {
        ktr[i]=1;
        sum+=a[i];
      //  cout<<i<<" "<<a[i]<<" "<<sum<<endl;
        s.insert({a[i],i});
        if(sum>=L&&sum<=R)
        {
            vector<int>kq={};
            for(int i=0;i<n;i++)
                if(ktr[i]==1)
                    kq.pb(i);
            return kq;
        }
        if(sum>R)
        {
            ii cc=*s.begin();
            s.erase(cc);
            ktr[cc.sc]=0;
            sum-=cc.fs;
        }
            if(sum>=L&&sum<=R)
        {
            vector<int>kq={};
            for(int i=0;i<n;i++)
                if(ktr[i]==1)
                    kq.pb(i);
            return kq;
        }
    }
    return {};
}

#ifdef SKY
int main()
{
    freopen("A.inp","r",stdin);
    freopen("A.out","w",stdout);
    int l,u,n;
    vector<int>w;
    cin>>l>>u>>n;
    for(int i=1;i<=n;i++)
    {
        int u;
        cin>>u;
        w.pb(u);
    }
    vector<int>kq=find_subset(l,u,w);
    for(auto u:kq)cout<<u<<" ";
}
#endif
#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...