1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long #define PII pair<int,int> #define fi first #define se second const int N=2e5+10; int a[N],n; bool check(int x) { if(x==1) { for(int i=1;i<n;i++)if(a[i]>=a[i+1])return 0; return 1; } vector<PII>stk;int len=0; for(int i=1;i<=n;i++) { if(a[i]>len)len=a[i]; else if(a[i]==len) { int id=len; while(!stk.empty()&&stk.back().fi==id&&stk.back().se==x-1)stk.pop_back(),id--; if(id==0)return 0; if(!stk.empty()&&stk.back().fi==id) { int x=stk.back().se; stk.pop_back();stk.push_back({id,x+1}); } else stk.push_back({id,1}); } else { while(!stk.empty()&&stk.back().fi>a[i])stk.pop_back(); int id=a[i]; while(!stk.empty()&&stk.back().fi==id&&stk.back().se==x-1)stk.pop_back(),id--; if(id==0)return 0; if(!stk.empty()&&stk.back().fi==id) { int x=stk.back().se; stk.pop_back();stk.push_back({id,x+1}); } else stk.push_back({id,1}); } len=a[i]; } return 1; } signed main() { cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; int l=1,r=1e9,ans=1e9; while(l<=r) { int mid=(l+r)>>1; if(check(mid))r=mid-1,ans=mid; else l=mid+1; } cout<<ans; return 0; }
- 1
信息
- ID
- 8634
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者