Submission #1005939

#TimeUsernameProblemLanguageResultExecution timeMemory
1005939vjudge1Gap (APIO16_gap)C++17
30 / 100
28 ms3416 KiB
#include<bits/stdc++.h> #include "gap.h" #pragma GCC optimize("O3") #pragma GCC target("avx2") #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vl vector<ll> using namespace std; const int mxn=3e5+5; /*multiset<ll>ms; void MinMax(ll x,ll y,ll &x1,ll &y1){ x1=*ms.lower_bound(x); y1=*prev(ms.upper_bound(y)); }*/ ll sol1(int n){ ll mn=0,mx=1e18; int l=1,r=n; ll a[n+1]; while(l<=r){ ll s,t; MinMax(mn,mx,&s,&t); a[l++]=s;a[r--]=t; mn=s+1,mx=t-1; }ll ans=0; for(int i=2;i<=n;i++)ans=max(ans,a[i]-a[i-1]); return ans; } ll sol2(int n){ ll mn=0,mx=1e18; ll s,t;MinMax(mn,mx,&s,&t); ll add = (t-s)/(n-1); ll ans=add;ll cs=s; while(s<t){ ll cmn=cs,cmx=cs; ll tt=1; while(1){ ll cl=cmn,cr=cmx; if(s+(tt-1)*add>=t) MinMax(s+(tt-1)*add,s+tt*add,&cl,&cr); if(cl==-1&&cr==-1){tt++;continue;} cmn=cl,cmx=cr;break; } ans=max(ans,cmx-cmn); ans=max(ans,cmn-cs); s+=(tt)*add;cs=cmx; }return ans; } long long findGap(int T, int N){ if(T==1)return sol1(N); else return sol2(N); } /*int main(){ int n;cin>>n; for(int i=1;i<=n;i++){ int x;cin>>x;ms.insert(x); }for(auto it : ms)cout<<it<<' ';cout<<'\n'; cout<<findGap(2,n); }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...