Submission #807640

#TimeUsernameProblemLanguageResultExecution timeMemory
807640OAleksaDetecting Molecules (IOI16_molecules)C++14
100 / 100
41 ms6292 KiB
#include <bits/stdc++.h> #include "molecules.h" #define f first #define s second using namespace std; vector<int> find_subset(int l, int u, vector<int> w) { vector<pair<int, int>> a; int n = w.size(); for(int i = 0;i < n;i++) a.push_back({w[i], i}); sort(a.begin(), a.end()); vector<int> ans; for(int i = 0;i < n;i++) { if(a[i].f >= l && a[i].f <= u) { ans.push_back(a[i].s); return ans; } } vector<long long> p(n); p[0] = a[0].f; for(int i = 1;i < n;i++) p[i] = p[i - 1] + a[i].f; int L, R; for(int i = 0;i < n;i++) { int l1 = i, r1 = n - 1, id = -1; while(l1 <= r1) { int mid = (l1 + r1) / 2; if(p[mid] - (i == 0 ? 0 : p[i - 1]) <= l) { id = mid; l1 = mid + 1; } else r1 = mid - 1; } if(id != -1) { long long s = 0; L = i, R = id; s = p[id] - (i == 0 ? 0 : p[i - 1]); if(id != n - 1) { s += a[id + 1].f; ++R; } if(s >= l && s <= u) { for(int j = L;j <= R;j++) ans.push_back(a[j].s); return ans; } if(id == n - 1) break; long long x = s - u; //trazim prvi manji jednak od a[id] - x l1 = i, r1 = id; int u = -1; while(l1 <= r1) { int mid = (l1 + r1) / 2; if(a[mid].f <= a[id].f - x) { u = mid; l1 = mid + 1; } else r1 = mid - 1; } if(u == -1 || s - a[u].f < l || s - a[u].f > u) continue; for(int j = i;j <= id + 1;j++) { if(j == u) continue; ans.push_back(a[j].s); } return ans; } } return ans; } // int main() // { // ios_base::sync_with_stdio(false); // cin.tie(0); // cout.tie(0); // int tt = 1; // //cin >> tt; // while(tt--) { // int l, r; // cin >> l >> r; // int n; // cin >> n; // vector<int> x(n); // for(int i = 0;i < n;i++) // cin >> x[i]; // vector<int> res = find_subset(l, r, x); // for(auto x : res) // cout << x << " "; // cout << endl; // } // return 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...