제출 #299391

#제출 시각아이디문제언어결과실행 시간메모리
299391c4ts0upDetecting Molecules (IOI16_molecules)C++17
100 / 100
73 ms6884 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define ff first #define ss second typedef long long ll; ll n; vector <pair <ll,int> > arr; vector <ll> ps; vector <int> res; vector<int> find_subset(int l, int u, vector<int> w) { n = w.size(); // pasamos los valores al arreglo global for (int i=0; i<n; i++) arr.pb({(ll)(w[i]), (i)}); // ordenamos el arreglo sort(arr.begin(), arr.end()); // hacemos el prefix sum ps.resize(n+1); ps[0] = 0LL; for (int i=0; i<n; i++) ps[i+1] = ps[i] + arr[i].ff; //cout << "ps: "; //for (int x : ps) cout << x << ", "; //cout << endl; // fuerza bruta int bajo, alto; bool flag = false; for (int i=0; i<n && !flag; i++) { int lb = i, ub = n, mid; while (lb <= ub) { mid = (lb+ub)/2; if (ps[mid]-ps[i] < l) lb = mid+1; else ub = mid-1; } //cout << i << " : " << "lb = " << lb << ", ub = " << ub << ", mid = " << mid << endl; if (i <= lb && lb <= n && l <= ps[lb]-ps[i] && ps[lb]-ps[i] <= u) { bajo = i; alto = lb-1; flag = true; } if (i <= ub && ub <= n && l <= ps[ub]-ps[i] && ps[ub]-ps[i] <= u) { bajo = i; alto = ub-1; flag = true; } } if (flag) { for (int idx=bajo; idx<=alto; idx++) res.pb(arr[idx].ss); } return res; }
#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...