卡壳点:
// 双指针j的范围没有规定好
// 没注意题目描述里输入能有负数,找最值的流程错误
没有按流程来写代码,大量跳步导致错误
双指针写循环前就得看好指针范围,
找最值设置maxn,前设置成负数而不是0
#include <iostream>
#include <cstring>
#include <cstring>
#include <algorithm>
#include <climits>
using namespace std;
const int N = 1e5 + 10;
int f[N];
int main(){
int n;
cin >> n;
for(int i = 1;i <= n;i++){
cin >> f[i] ;
}
long long maxn = LONG_LONG_MIN;
int res = 0;
for(int i = 1;i <= n;i*=2){
long long sum = 0;
for(int j = i;j < i*2 && j <= n;j++){
// 双指针j的范围没有规定好
// 没注意题目描述里输入能有负数,找最值的流程错误
sum += f[j];
}
// cout << sum << endl;
if(sum > maxn){
maxn = sum;
res = i;
}
}
int cnt = 0;
while(res){
res /= 2;
cnt++;
}
cout << cnt << endl;
}