Submission #234265

#TimeUsernameProblemLanguageResultExecution timeMemory
234265wiwihoDetecting Molecules (IOI16_molecules)C++14
9 / 100
5 ms512 KiB
#include "molecules.h" //#define NDEBUG #include <bits/stdc++.h> #include <bits/extc++.h> #define StarBurstStream ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define iter(a) a.begin(), a.end() #define riter(a) a.rbegin(), a.rend() #define lsort(a) sort(iter(a)) #define gsort(a) sort(riter(a)) #define mp(a, b) make_pair(a, b) #define pb(a) push_back(a) #define eb(a) emplace_back(a) #define pf(a) push_front(a) #define pob pop_back() #define pof pop_front() #define F first #define S second #define printv(a, b) {bool pvaspace=false; \ for(auto pva : a){ \ if(pvaspace) b << " "; pvaspace=true;\ b << pva;\ }\ b << "\n";} #define pii pair<int, int> #define pll pair<ll, ll> #define tiii tuple<int, int, int> #define mt make_tuple #define gt(t, i) get<i>(t) #define iceil(a, b) ((a) / (b) + !!((a) % (b))) //#define TEST typedef long long ll; typedef unsigned long long ull; using namespace std; using namespace __gnu_pbds; const ll MOD = 1000000007; const ll MAX = 2147483647; template<typename A, typename B> ostream& operator<<(ostream& o, pair<A, B> p){ return o << '(' << p.F << ',' << p.S << ')'; } vector<ll> BIT; int lowbit(int x){ return x & -x; } void modify(int x, ll v){ for(; x < BIT.size(); x += lowbit(x)){ BIT[x] += v; } } vector<int> find_subset(int L, int U, vector<int> w) { int n = w.size(); vector<pii> t(n); BIT.resize(n + 1); for(int i = 0; i < n; i++){ t[i] = mp(w[i], i); } lsort(t); for(int i = 0; i < n; i++){ modify(i + 1, t[i].F); } int tmp = 0; ll sum = 0; for(int i = __lg(n); i >= 0; i--){ if(tmp + (1 << i) > n) continue; if(sum + BIT[tmp + (1 << i)] < L){ tmp += (1 << i); sum += BIT[tmp]; } } if(tmp < n && sum + t[tmp].F >= L && sum + t[tmp].F <= U){ vector<int> ans; for(int i = 0; i <= tmp; i++) ans.eb(t[i].S); return ans; } vector<int> pos(n); for(int i = 0; i < n; i++) pos[i] = i; for(int i = 0; i < n / 2; i++){ modify(i + 1, -t[i].F); modify(i + 1, t[n - i - 1].F); pos[i] = n - i - 1; // printv(pos, cerr); int k = n - i - 1; tmp = 0; sum = 0; for(int j = __lg(k); j >= 0; j--){ if(tmp + (1 << j) > k) continue; if(sum + BIT[tmp + (1 << j)] < L){ tmp += (1 << j); sum += BIT[tmp]; } } // cerr << i << " " << tmp << "\n"; if(tmp < k && sum + t[tmp].F >= L && sum + t[tmp].F <= U){ vector<int> ans; for(int j = 0; j <= tmp; j++) ans.eb(t[pos[j]].S); return ans; } } return vector<int>(); }

Compilation message (stderr)

molecules.cpp: In function 'void modify(int, ll)':
molecules.cpp:57:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; x < BIT.size(); x += lowbit(x)){
           ~~^~~~~~~~~~~~
#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...