제출 #772780

#제출 시각아이디문제언어결과실행 시간메모리
772780ZHIRDILBILDIZA Difficult(y) Choice (BOI21_books)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
#include"books.h"
#define ll long long
#define fi first
#define se second
using namespace std ;
//void impossible()
//{
//    cout << "-1\n" ;
//    exit(0) ;
//}
//void answer(vector<int> ans)
//{
//    for(int i : ans)
//        cout << i << ' ' ;
//    exit(0) ;
//}
//ll skim(int ind)
//{
//    cout << "? " << ind << '\n' ;
//    return ind ;
//}
void solve(int n, int k, ll a, int s)
{
    vector<int> ans ;
    ll x[n + 1] = {}, pref[n + 1] = {} ;
    for(int i = 1 ; i <= k ; i++)
    {
        x[i] = skim(i) ;
        pref[i] = pref[i - 1] + x[i] ;
    }
    if(pref[k] > 2ll * a)
        impossible() ;
    if(a <= pref[k] && pref[k] <= 2ll * a)
    {
        for(int i = 1 ; i <= k ; i++)
            ans.push_back(i) ;
        answer(ans) ;
    }
    if(s >= n)
    {
        for(int i = k + 1 ; i <= n ; i++)
        {
            x[i] = skim(i) ;
            s.insert({x[i], i}) ;
            pref[i] = pref[i - 1] + x[i] ;
        }
        for(int i = 1 ; i <= n ; i++)
            if(x[i] >= a && pref[k - 1] + x[i] <= 2ll * a)
            {
                for(int j = 1 ; j < k ; j++)
                    ans.push_back(j) ;
                ans.push_back(i) ;
                answer(ans) ;
            }
        for(int i = k ; i <= n ; i++)
            if(a <= pref[i] - pref[i - k] && pref[i] - pref[i - k] <= 2ll * a)
            {
                for(int j = i - k + 1 ; j <= i ; j++)
                    ans.push_back(j) ;
                answer(ans) ;
            }
        impossible() ;
    }
    ll l = 0, r = n + 1 ;
    while(l + 1 < r)
    {
        int mid = (l + r) >> 1 ;
        ll num = x[mid] ;
        if(!num)
        {
            num = skim(mid) ;
            x[mid] = num ;
        }
        if(num < a)l = mid ;
        else r = mid ;
    }
    if(x[r] + pref[k - 1] <= 2ll * a)
    {
        for(int i = 1 ; i < k ; i++)
            ans.push_back(i) ;
        ans.push_back(r) ;
        answer(ans) ;
    }
    l = 0, r = n - k + 1 ;
    vector<pair<ll, int>> w, ls ;
    while(l + 1 < r)
    {
        w.clear() ;
        ll mid = (l + r) >> 1, sum = 0 ;
        for(int i = mid ; i < mid + k ; i++)
        {
            ll num = x[i] ;
            if(!num)num = skim(i) ;
            sum += num ;
            w.push_back({num, i}) ;
        }
        if(sum > 2 * a)r = mid ;
        else
        {
            ls = w ;
            ans.clear() ;
            for(auto i : w)
                ans.push_back(i.se) ;
            l = mid ;
        }
    }
    ll sum = 0 ;
    for(auto i : ls)
        sum += i.fi ;
    if(a <= sum && sum <= 2 * a)
        answer(ans) ;
    else
        impossible() ;
}
//signed main()
//{
//    int n, k, a, s ;
//    cin >> n >> k >> a >> s ;
//    solve(n, k, a, s) ;
//    return 0 ;
//}

컴파일 시 표준 에러 (stderr) 메시지

books.cpp: In function 'void solve(int, int, long long int, int)':
books.cpp:45:15: error: request for member 'insert' in 's', which is of non-class type 'int'
   45 |             s.insert({x[i], i}) ;
      |               ^~~~~~