Submission #691716

#TimeUsernameProblemLanguageResultExecution timeMemory
691716IUA_HasinIntercastellar (JOI22_ho_t1)C++17
60 / 100
2074 ms24372 KiB
#include <bits/stdc++.h>

#define endl                                "\n"
#define finp                                for(int i=0; i<n; i++)
#define fknp                                for(int k=0; k<n; k++)
#define yeap                                cout<<"YES"<<endl
#define nope                                cout<<"NO"<<endl
#define inpintn                             int n; cin>>n
#define inpintarrn                          int arr[n]; for(int i=0; i<n; i++){cin>>arr[i];}
#define inpllarrn                           long long arr[n]; for(int i=0; i<n; i++){cin>>arr[i];}
#define ll                                  long long

ll expo(ll n){
    ll count=0;
    while(n%2==0){
        count++;
        n/=2;
    }
    return count;
}

using namespace std;

int main ()
{
   ll n;
   cin>>n;
   ll arr[n];
   ll zrr[n];
   for (int i=0; i<n; i++){
    cin>>arr[i];
    zrr[i]=arr[i];
   }
   sort(zrr, zrr+n);
   ll q;
   cin>>q;
   ll brr[q];
   for (int i=0; i<q; i++){
    cin>>brr[i];
   }

   ll crr[n];
   for (int i=0; i<n; i++){
    int x=expo(arr[i]);
    int y=pow(2,x);
    crr[i]=y;
   }
   if (zrr[n-1]>8){
    for (int i=0; i<q; i++){
    ll coun=0;
    for (int j=0; j<n; j++){
        if (j==n-1){
            if (coun>=brr[i]){
                ll z=arr[n-2]/crr[n-2];
                cout << z << " ";
                break;
            } else {
                ll z=arr[n-1]/crr[n-1];
                cout << z << " ";
                break;

            }

        } else if (brr[i]>coun){
            coun+=crr[j];
        } else {
            ll z=arr[j-1]/crr[j-1];
            cout << z << " ";
            break;
        }
    }
   }
   } else {
    vector<ll> ans;
   for (int i=0; i<n; i++){
    ll a=expo(arr[i]);
    if(a==0){
        ans.push_back(arr[i]);
    } else {
        ll b=pow(2,a);
        ll c=arr[i]/b;
        for (int k=0; k<b; k++){
            ans.push_back(c);
        }
    }
   }
   for (int l=0; l<q; l++){
    ll d=ans[brr[l]-1];
    cout << d << " ";
   }
   }




    return 0;


}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...