有大佬能帮忙证明一下这份代码的时间复杂度吗?
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000000+5;
int n,q;
int d[N],k[N];
int idx,x,y;/*
bool check(int Mid,int p){
int E=0;
for(int i=1;i<=n;){
if(i+p>=n){
if(d[i]<=d[n]) E++;
break;
}
idx=i;
x=-0x3f3f3f3f;
while(idx<=i+p){
if(d[idx]>=x&&d[idx]<d[i]){
x=d[idx],y=idx;
}
++idx;
}
if(x!=-0x3f3f3f3f){
i=y;
}else{
idx=i;
while(idx<=i+p){
if(d[idx]>=x){
x=d[idx];
y=idx;
}
++idx;
}
E++;
i=y;
}
}
return E<=Mid;
}
void solve(int x){
int ans=0;
int L=0,R=n;
while(L<=R){
int mid=L+R>>1;
if(check(mid,k[x])) ans=mid,R=mid-1;
else L=mid+1;
}
cout<<ans<<"\n";
}*/
void Try(int p){
int E=0;
for(int i=1;i<=n;){
if(i+p>=n){
if(d[i]<=d[n]) E++;
break;
}
idx=i;
x=-0x3f3f3f3f;
while(idx<=i+p){
if(d[idx]>=x&&d[idx]<d[i]){
x=d[idx],y=idx;
}
++idx;
}
if(x!=-0x3f3f3f3f){
i=y;
}else{
idx=i;
while(idx<=i+p){
if(d[idx]>=x){
x=d[idx];
y=idx;
}
++idx;
}
E++;
i=y;
}
}
printf("%lld\n",E);
}
signed main(){
// freopen("bird.in","r",stdin);freopen("bird.out","w",stdout);
// ios::sync_with_stdio(false);
// cin.tie(nullptr),cout.tie(nullptr);
// cin>>n;
scanf("%lld",&n);
for(int i=1;i<=n;i++) cin>>d[i];
scanf("%lld",&q);
for(int i=1;i<=q;i++) cin>>k[i];
for(int i=1;i<=q;i++){
// solve(i);
Try(k[i]);
}
return 0;
}
主要是还过了