제출 #679721

#제출 시각아이디문제언어결과실행 시간메모리
679721senthetaDetecting Molecules (IOI16_molecules)C++17
100 / 100
68 ms8632 KiB
#include "molecules.h" // author : sentheta aka vanwij #include<iostream> #include<iomanip> #include<algorithm> #include<cassert> #include<random> #include<chrono> #include<cmath> #include<string> #include<vector> #include<bitset> #include<queue> #include<stack> #include<map> #include<set> using namespace std; #define Int long long #define V vector #define pii pair<int,int> #define ff first #define ss second #define rand() (uniform_int_distribution<int>(0,1<<30)(rng)) mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); #define pow2(x) (1LL<<(x)) #define msb(x) (63-__builtin_clzll(x)) #define bitcnt(x) (__builtin_popcountll(x)) #define nl '\n' #define _ << ' ' << #define all(x) (x).begin(), (x).end() #define rep(i,a,b) for(int i = (int)(a); i < (int)(b); i++) #define dbg(x) if(1) cout << "?" << #x << " : " << (x) << endl << flush; const int N = 2e5+5; Int n; Int l, r; Int a[N]; Int ord[N]; Int prf[N]; // take i prefix, j suffix Int f(int i,int j){ Int ret = prf[i-1]; ret += prf[n-1]; if(j!=n) ret -= prf[n-j-1]; return ret; } V<int> find_subset(int _l,int _r,V<int> _a){ n = _a.size(); l=_l; r=_r; rep(i,0,n) a[i] = _a[i]; rep(i,0,n) ord[i] = i; sort(ord,ord+n,[&](int i,int j){ return a[i] < a[j]; }); prf[0] = a[ord[0]]; rep(i,1,n){ prf[i] = prf[i-1] + a[ord[i]]; } for(Int cnt=1; cnt<=n; cnt++){ Int suf = 0; for(Int J=1<<20; J; J/=2) if(suf+J<=cnt && f(cnt-suf-J,suf+J)<=r) suf+=J; Int sum = f(cnt-suf,suf); if(l<=sum && sum<=r){ V<int> ans; rep(i,0,cnt-suf) ans.push_back(ord[i]); for(int i=n-1; i>=n-suf; i--) ans.push_back(ord[i]); return ans; } } return {}; }
#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...