Submission #218962

#TimeUsernameProblemLanguageResultExecution timeMemory
218962yayupsDetecting Molecules (IOI16_molecules)C++11
69 / 100
129 ms7276 KiB
// created 01 FEB 2018 // updated JUNE 2018 // updated JULY 2018 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string> #include <vector> #include <stack> #include <queue> #include <set> #include <cstring> #include <map> #include <cstdlib> #include <ctime> #include <cassert> #include <bitset> #include <fstream> #include <sstream> #include <cstdlib> #include <list> #include <stdexcept> #define N 200000 using namespace std; vector<int> find_subset(int l, int u, vector<int> ww) { vector<int> w; for(int i=0;i<ww.size();i++) w.push_back(ww[i]); sort(w.begin(),w.end()); int n=w.size(); //need to find sorting bijection vector<int> A(n); map<int,int> mults; map<int,int>::iterator it; for(int i=0;i<n;i++) { A[i]=lower_bound(w.begin(),w.end(),ww[i])-w.begin(); it=mults.find(ww[i]); if(it==mults.end()) { mults.insert(pair<int,int>(ww[i],1)); } else { A[i] = A[i]+ mults[ww[i]]; mults[ww[i]]++; } } vector<int> B(n); for(int i=0;i<n;i++) { B[A[i]]=i; } //real solution vector<int> v(n); vector<int> result; v[0]=w[0]; //cout << v[0] << endl; for(int i=1;i<n;i++) { v[i] = v[i-1]+w[i]; //cout << v[i]<< endl; } vector<int>::iterator low,up; int a,b=0; int t; //it's going to be v[b]-v[a] for(a=-1;a<n;a++) { if(a==-1) { t=0; } else { t=v[a]; } low=lower_bound(v.begin(),v.end(),l+t); up =upper_bound(v.begin(),v.end(),u+t); //cout << "for a = " << a << " we have low = "<<low-v.begin()<<" and up= "<<up-v.begin() << endl; if(low-v.begin()<=up-v.begin()) { b=low-v.begin(); if(v[b]-t>=l and v[b]-t<=u) break; //cout << a; } } //cout << a<<endl<<b<<endl; result.clear(); if(a==n) { return result; } for(int i=0;i<b-a;i++) { result.push_back(B[a+1+i]); } //cout << a << endl; return result; }

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<ww.size();i++) w.push_back(ww[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...