This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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)
//{
// int num ;
// cout << "? " << ind << '\n' ;
// cin >> num ;
// return num ;
//}
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) ;
}
ll l = 0, r = n + 1 ;
while(l + 1 < r)
{
ll mid = (l + r) >> 1ll, num = x[mid] ;
if(!num)
{
num = skim(mid) ;
x[mid] = num ;
}
if(num < a)l = mid ;
else r = mid ;
}
if(r != n + 1 && x[r] + pref[k - 1] <= 2ll * a)
{
for(int i = 1 ; i < k ; i++)
ans.push_back(i) ;
ans.push_back(r) ;
answer(ans) ;
}
// if(s >= 170)
// {
// l = 0, r = n - k + 2 ;
// vector<pair<ll, int>> w, ls ;
// while(l + 1 < r)
// {
// w.clear() ;
// ll mid = (l + r) >> 1ll, sum = 0 ;
// for(int i = mid ; i < mid + k ; i++)
// {
// ll num = x[i] ;
// if(!num)
// {
// num = skim(i) ;
// x[i] = num ;
// }
// sum += num ;
// w.push_back({num, i}) ;
// }
// if(sum > 2ll * a)r = mid ;
// else
// {
// ls = w ;
// ans.clear() ;
// for(auto i : w)
// ans.push_back(i.se) ;
// if(sum >= a)answer(ans) ;
// l = mid ;
// }
// }
// impossible() ;
// }
// else
// {
deque<int> d ;
ll sum = 0 ;
for(int i = 1 ; i <= k ; i++)
{
sum += x[i] ;
d.push_back(i) ;
}
for(int j = r ; j >= r - k + 1 ; j--)
if(!x[j])x[j] = skim(j) ;
for(int j = r - k + 1 ; j <= r ; j++)
{
sum -= x[j - r + k] ;
sum += x[j] ;
d.pop_front() ;
d.push_back(j) ;
if(a <= sum && sum <= 2ll * a)
{
for(int i : d)
ans.push_back(i) ;
answer(ans) ;
}
}
impossible() ;
// }
}
//signed main()
//{
// int n, k, a, s ;
// cin >> n >> k >> a >> s ;
// solve(n, k, a, s) ;
// return 0 ;
//}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |