Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <deque>
- #include <cmath>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <iostream>
- #include <list>
- #include <map>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <utility>
- #include <vector>
- #define fst first
- #define snd second
- #define all(x) (x).begin(), (x).end()
- #define clr(a, v) memset(a, v, sizeof(a))
- #define pb push_back
- #define mp make_pair
- #define sz(x) (int)(x.size())
- #define FORN(i,s,n) for(int i=s;i<(int)(n);i++)
- #define FOR(i,n) FORN(i,0,n)
- #define FORIT(i,x) for( typeof x.begin() i=x.begin(); i!=x.end(); i++ )
- #define trace(x) cerr << #x << ": " << x << endl;
- #define trace2(x, y) cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
- using namespace std;
- typedef long long int64;
- typedef vector <int> vi;
- typedef pair <int,int> ii;
- typedef vector <string> vs;
- typedef vector <ii> vii;
- const int INF = 2e9+9;
- vi A;
- int64 N,P,Q;
- bool f ( int64 K ){
- int64 T=K;
- FOR(i,sz(A)){
- int64 L=A[i];
- int64 lo=0,hi=1e9+1,mi;
- while(hi-lo>1){
- mi=(hi+lo)/2;
- if ( (mi*(P) + (K-mi)*Q) >=L ) hi=mi;
- else lo=mi;
- }
- int64 ans;
- if ( lo*(P) + (K-lo)*Q >=L ) ans=lo;
- else ans=hi;
- T-=ans;
- }
- if (T<0) return 0;
- else return 1;
- }
- int main(){
- int64 aux;
- cin>>N>>P>>Q;
- A.assign(N,0);
- FOR(i,N) scanf("%d", &A[i]);
- int64 lo1=1,hi1=1e9+1,mi1,ans;
- while(hi1-lo1>1){
- mi1=(hi1+lo1)/2;
- if (f(mi1))hi1=mi1;
- else lo1=mi1;
- }
- if (f(lo1)) ans=lo1;
- else ans=hi1;
- cout<<ans<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment