卡壳点:
// 双指针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; }