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 pb push_back
#define F first
#define S second
#define mk make_pair
#define mt make_tuple
using namespace std;
typedef long long ll;
const int Max = 1e5 + 10;
ll ARR[Max]; bool ASK[Max];
int GET(int i)
{
if(ASK[i]) return ARR[i];
ASK[i] = 1;
return ARR[i] = skim(i);
}
ll SUM(int l , int r)
{
ll ans = 0;
for(int i = l ; i <= r ; i++) ans += GET(i);
return ans;
}
void solve(int N , int K , ll A , int S)
{
if(SUM(1 , K) > 2 * A) return impossible();
if(SUM(1 , K) >= A)
{
vector<int> res; for(int i = 1 ; i <= K ; i++) res.pb(i);
return answer(res);
}
int l = 0 , r = N + 1;
while(r - l > 1)
{
int md = (l + r) >> 1;
if(SUM(1 , K - 1) + GET(md) >= A) r = md;
else l = md;
}
if(SUM(1 , K - 1) + GET(r) <= 2 * A)
{
vector<int> res; for(int i = 1 ; i < K ; i++) res.pb(i); res.pb(r);
return answer(res);
}
for(int ln = K - 1 ; ln >= 0 ; ln--)
{
if(SUM(1 , ln) + SUM(l - K + ln + 1 , l) >= A)
{
vector<int> res;
for(int i = 1 ; i <= ln ; i++) res.pb(i);
for(int i = l - K + ln + 1 ; i <= K ; i++) res.pb(i);
return answer(res);
}
}
return impossible();
}
# | 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... |