답안 #846355

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
846355 2023-09-07T13:59:15 Z vjudge1 OGLEDALA (COI15_ogledala) C++17
41 / 100
65 ms 18620 KB
#ifndef Local
    #pragma GCC optimize("O3,unroll-loops")
    #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#endif
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#define int long long
#define pb push_back
#define lim 300000
#define till 40001
// # of primes till 1e6 = 7e4
using namespace std;
using namespace __gnu_pbds;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;
using pii = array<int,2>;

const int mod=1000000007ll;

struct comp{
    bool operator() (pii a,pii b){
        if(a[1]-a[0]>b[1]-b[0]){
            return 0;
        }
        if(a[1]-a[0]<b[1]-b[0]){
            return 1;
        }
        return a[0]>b[0];
    }
};

void solve(){
    int n,m,q;
    cin>>m>>n>>q;
    int a[n];
    int lad[min(m,300000ll)];
    for(int i=0;i<n;i++){
        cin>>a[i];
        lad[i]=a[i];
    }
    sort(a,a+n);
    priority_queue<pii,vector<pii>,comp>all;
    if(a[0]!=1)all.push({1,a[0]-1});
    for(int i=0;i<n-1;i++){
        //cerr<<a[i]+1<<" "<<a[i+1]-1<<"\n";
        if(a[i]+1<=a[i+1]-1)all.push({a[i]+1,a[i+1]-1});
    }
    if(a[n-1]+1<=m)all.push({a[n-1]+1,m});
    int next=n;
    while(all.size()&&next<min(m,300000ll)){
        pii cur=all.top();
        all.pop();
        int mid;
        if((cur[1]-cur[0])%2)mid=(cur[1]+cur[0])/2;
        else mid=(cur[1]+cur[0])/2;
        //if(next<100)cerr<<cur[0]<<" "<<mid<<" "<<cur[1]<<"\n";
        lad[next++]=mid;
        if(cur[0]<=mid-1)all.push({cur[0],mid-1});
        if(cur[1]>=mid+1)all.push({mid+1,cur[1]});
    }
    /*
    for(int i=0;i<m;i++){
        cerr<<lad[i]<<" ";
    }cerr<<"\n";
    */
    for(int i=0;i<q;i++){
        int tem;
        cin>>tem;
        tem--;
        cout<<lad[tem]<<"\n";
    }
}


signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
#ifdef Local  
#ifndef INTERACTIVE
    freopen("in","r",stdin);
#endif
    freopen("out","w",stdout);
#endif
    int t=1;
    //cin>>t;
    while (t--)
    {
        solve();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 20 ms 2520 KB Output is correct
4 Correct 27 ms 2516 KB Output is correct
5 Correct 46 ms 6100 KB Output is correct
6 Correct 47 ms 6084 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 11972 KB Output is correct
2 Correct 44 ms 11204 KB Output is correct
3 Correct 56 ms 13512 KB Output is correct
4 Correct 62 ms 12932 KB Output is correct
5 Correct 65 ms 13504 KB Output is correct
6 Correct 62 ms 13764 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 53 ms 18620 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -