%%%I need help

戳这里

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int main(){
	int n,ans=0;
    cin>>n;
    vector<vector<LL>> b(n+1,vector<LL>(7,0));
    for(int i=1;i<=n;i++){
    	LL a;
    	int cnt=0;
    	cin>>a;
    	stack<LL>st;
    	while(a>1){
    		st.push(a);
    		a=a/2+1;
    		a=sqrt(a);
		}
    	while(!st.empty()){
    		b[i][cnt++]=st.top();
    		st.pop();
		}
	}
    for(int i=0;i<=6;i++){
    	for(int j=1;j<=n;j++){
    		if(b[j][i] && b[j][i]!=b[j-1][i]){
    			ans++;
			}
		}
	}
	cout<<ans<<endl;
    return 0;
}

我也来一发:

#include<bits/stdc++.h>
using namespace std;
long long a[200001],ans=0;
int vis[200001],n,x=0;
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		long long t=a[i];
		while(t-1){
			vis[i]++;
			t=sqrt(t/2+1);
		}
		x=x>vis[i]?x:vis[i];
	}
	for(int i=x;i>=1;i--){
		for(int j=0;j<=n-1;j++){
			if(vis[j]==i){
				if(a[j]!=a[j+1]){
					ans++;
				}
				vis[j]--;
				a[j]=sqrt(a[j]/2+1);
			}
		}
	}
	printf("%d",ans);
}