倍增法
给定一个长度为 n 的数列 a ,然后进行若干次查询 , 每一次给定一个整数 T , 求出最大的 k , 满足
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int sum[N], a[N];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
sum[i] = sum[i - 1] + a[i];
}
int T;
int k = 0, p = 1, s = 0;
cin >> T;
while(1){
if(p == 0) break;
if(s + sum[k + p] - sum[k] <= T)
{
s += sum[k + p] - sum[k];
k += p;
p *= 2;
}
else p /= 2;
}
cout << k << endl;
}