Submission #1354078

#TimeUsernameProblemLanguageResultExecution timeMemory
1354078gvancakA Difficult(y) Choice (BOI21_books)C++20
100 / 100
0 ms420 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
#include "books.h"

using namespace std;

map <ll,ll> a;
void solve(int N, int K, long long A, int S) {
    // TODO implement this function
    ll k=K;
    ll x=A;
    a.clear();
    ll l=1,r=N;
    while (l<r){
    	ll mid=(l+r)/2;
    	ll y=skim(mid); a[mid]=y;
    	if (y<A) l=mid+1; else r=mid;
	}
	
	
	if (a[l]==0){
	x=skim(l); a[l]=x; }
	if (l==N && a[l]<A){
		l=N+1;
	}
//	cout<<l<<endl;
	vector <int> ans;
	ans.clear();
	ll sum=0;
	ll b[2*k+5];
	for (int i=1; i<=2*k; i++) b[i]=0;
	sum=0;
	for (int i=1; i<=k; i++){
		if (a[i]==0) {
			x=skim(i); a[i]=x;
		}
		sum+=a[i];
		b[i]=i;
	}//cout<<"a"<<endl;
	if (sum>2*A){
		impossible(); return;
	}
	else
	if (sum>=A){
		for (int i=1; i<=k; i++) ans.pb(i);
		answer(ans); return;
	}
	
	if (l>k && l<=N){
		
	if (a[l]==0){
		x=skim(l); a[l]=x;
	}
	
	sum-=a[k]; sum+=a[l];
	if (sum>=A && sum<=2*A){
		ans.clear();
		for (int i=1; i<k; i++) ans.pb(i);
		ans.pb(l);
		answer(ans); return ;
	}
	
	}
	sum=0;
	for (int i=1; i<=k; i++) sum+=a[i];
	
	ll sz=k;
	for (int i=max(k,l-k); i<l; i++){
		if (i<=k) continue;
		sz++; b[sz]=i; if (a[i]==0){
			x=skim(i); a[i]=x;
		}
	}
	ll ind=-1;
	for (int i=k+1; i<=sz; i++){
		
		sum-=a[b[i-k]]; sum+=a[b[i]];
		if (sum>=A && sum<=2*A) {
			ind=i-k+1; break;
		}
	}
	//cout<<sum<<endl;
	if (ind==-1){
		impossible(); return ;
	}
	
	ans.clear();
	for (int i=ind; i<ind+k; i++){
		ans.pb(b[i]);
	}
	answer(ans); return ;
	
	

}
/*
15 3 42 8
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21*/

/*
15 3 42 8
1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351
*/
/*
15 3 30 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 100
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...