Submission #1354053

#TimeUsernameProblemLanguageResultExecution timeMemory
1354053KhoaDuyA Light Inconvenience (CEOI23_light)C++20
100 / 100
281 ms444 KiB
#include <bits/stdc++.h>
#include "light.h"
using namespace std;
#ifdef LOCAL
#include "grader.cpp"
#endif
#define int __int128_t
#define ll long long
const int MAXLG=80;
int power[MAXLG+1];
int MAX=1;
int n;
vector<int> state;
int sum=0;
void prepare(){
    n=1;
    power[0]=1;
    for(int bruh=0;bruh<MAXLG;bruh++){
        MAX*=2;
        power[bruh+1]=MAX;
    }
    int len=1;
    for(int i=0;i<=MAXLG;i++){
        state.push_back(MAX-len+1);
        len<<=1;
    }
    return;
}
vector<ll> trans(){
    vector<ll> v;
    v.push_back(1);
    for(int i=0;i<state.size();i++){
        int len=MAX-state[i]+1;
        if(len<=n){
            v.push_back(n-len+1);
        }
    }
    sort(v.begin(),v.end());
    v.erase(unique(v.begin(),v.end()),v.end());
    return v;
}
pair<ll,vector<ll>> join(ll pa){
    n+=pa;
    return {pa,trans()};
}
void dnc(int layer,int old,int pa,int coef){
    assert(pa>0);
    assert(old+pa<power[layer]);
    assert(layer>0);
    if(old>=power[layer-1]){
        dnc(layer-1,old-power[layer-1],pa,coef);
        return;
    }
    if(old+pa<=power[layer-1]){
        for(int bruh=0;bruh<layer;bruh++){
            if(power[layer-1]-power[bruh]+1<=old+pa+1){
                state.push_back(coef+power[layer-1]-power[bruh]+1);
            }
        }
        if(old+pa<power[layer-1]){
            state.push_back(coef+old+pa+1);
        }
        if(old+pa==power[layer-1]){
            return;
        }
        dnc(layer-1,old,pa,coef+power[layer-1]);
    }
    else{
        dnc(layer-1,0,old+pa-power[layer-1],coef);
    }
}
pair<ll,vector<ll>> leave(ll pa){
    state.clear(),state.resize(0);
    dnc(MAXLG,sum,pa,0);
    sum+=pa;
    return {pa,trans()};
}
#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...
#Result Execution timeMemoryGrader output
Fetching results...