Submission #87695

#TimeUsernameProblemLanguageResultExecution timeMemory
87695Retro3014Detecting Molecules (IOI16_molecules)C++17
100 / 100
67 ms34644 KiB
#include "molecules.h"

#include <vector>
#include <algorithm>

typedef long long ll;

struct S{
    int x, y;
    bool operator <(const S &a)const{
        return y<a.y;
    }
};

using namespace std;
#define MAX_N 200000
vector<int> ans;
vector<S> v;
ll sum1[MAX_N+10], sum2[MAX_N+10];



vector<int> find_subset(int l, int u, vector<int> w){
    for(int i=0; i<w.size(); i++){
        v.push_back({i, w[i]});
    }
    sort(v.begin(), v.end());
    for(int i=0; i<v.size(); i++){
        if(i==0){
            sum1[i]=(ll)v[i].y;
        }else{
            sum1[i]=sum1[i-1]+(ll)v[i].y;
        }
    }
    for(int i=(int)v.size()-1; i>=0; i--){
        if(i==v.size()-1){
            sum2[i]=(ll)v[i].y;
        }else{
            sum2[i]=sum2[i+1]+(ll)v[i].y;
        }
    }
    int s=-1, e=0;
    while(e<=v.size()){
        if((s==-1?0:sum1[s])+sum2[e]>=(ll)l && (s==-1?0:sum1[s])+sum2[e]<=u){
            break;
        }
        else if((s==-1?0:sum1[s])+sum2[e]<(ll)l){
            if(s==e-1){
                break;
            }
            s++;
        }else{
            e++;
        }
    }
    if((s==-1?0:sum1[s])+sum2[e]>=(ll)l && (s==-1?0:sum1[s])+sum2[e]<=u){
        for(int i=0; i<=s; i++){
            ans.push_back(v[i].x);
        }
        for(int i=e; i<v.size(); i++){
            ans.push_back(v[i].x);
        }
    }
    return ans;
}

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:24:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0; i<w.size(); i++){
                  ~^~~~~~~~~
molecules.cpp:28:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0; i<v.size(); i++){
                  ~^~~~~~~~~
molecules.cpp:36:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(i==v.size()-1){
            ~^~~~~~~~~~~~
molecules.cpp:43:12: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(e<=v.size()){
           ~^~~~~~~~~~
molecules.cpp:60:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=e; i<v.size(); i++){
                      ~^~~~~~~~~
#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...