我这个程序的复杂度瓶颈应该是 O(i=1∑nin),肯定是小于 n2 的,实测是过不了 n=105 的,求分析这个复杂度的上界
#include <bits/stdc++.h>
#define re register int
#define int long long
#define min(x, y) (x < y ? x : y)
using namespace std;
typedef long long LL;
const int N = 1e5 + 10, logN = 50, inf = 1e9 + 1;
int n, m, f[N], s[N];
int st[N][logN], lg[N];
LL sum[N];
inline void init()
{
lg[0] = -1;
for (re i = 1; i <= n; i ++) lg[i] = lg[i / 2] + 1;
for (re j = 1; j <= lg[n]; j ++)
for (re i = 1; i + (1 << j) - 1 <= n; i ++)
st[i][j] = max(st[i][j - 1], st[i + (1 << (j - 1))][j - 1]);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (re i = 1; i <= n; i ++)
{
cin >> f[i] >> s[i];
sum[i] = sum[i - 1] + f[i];
st[i][0] = s[i];
}
init();
LL ans = inf;
for (re len = 1; len <= n; len ++)
for (re l = 1; l + len - 1 <= n; l ++)
{
int r = l + len - 1;
if (sum[r] - sum[l - 1] >= m)
{
int k = lg[r - l + 1];
int res = max(st[l][k], st[r - (1 << k) + 1][k]);
ans = min(res, ans);
}
}
cout << ans << '\n';
return 0;
}