A. Maximum Increase(Codeforces 702A)
思路
最暴力的思路是用两个指针枚举子串的首尾位置。但是这样的复杂度是 O(n2) 的,这样的算法承受不了本题的数据规模,说明这样枚举会出现许多重复。假设我们有一段序列 13,14,16,15,17 我们设置首指针为 1 ,当尾指针枚举到
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int n, ans, head, tail, a[maxn];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
ans = 1;
head = 1;
tail = 2;
while(tail <= n) {
// 如果尾指针能往下走就往下走
if(a[tail] > a[tail-1]) {
ans = max(ans, tail++ - head + 1);
}
// 否则重置首指针和尾指针
else {
head = tail++;
}
}
printf("%d\n", ans);
return 0;
}
B. Powers of Two(Codeforces 702B)
思路
根据复杂度的提示觉得这题应该是先枚举一个 i ,然后想办法瞬间知道