#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);
}