G. 2^Sort
https://codeforces.com/problemset/problem/1692/G
题意:给定n个数和一个长度k,寻找符合条件的长度为k + 1的区间数量。条件:将连续区间中的每个数从左到右依次与2^j次方相乘(j∈[0, k]),得到的连续区间严格递增。
思路:每个数都乘2的某个幂次,并且要求严格升序。那么如果当前的数大于前一个数的2分之1,则变换后的数满足升序的要求。所以维护一个长度变量,并判断当前数与前一个数的大小关系即可。注意,在不满足大小关系时,长度应该初始化1,这就相当于,在满足大小关系时,长度应该为2是一个道理。
inline void solve(){
int n, k;
cin >> n >> k;
int len = 1;
double pre;
int ans = 0;
for (int i = 0; i < n; ++i) {
if (i == 0) {
cin >> pre;
continue;
}
double cur;
cin >> cur;
if (cur / pre > 0.5f) {
len ++;
}
else {
len = 1;
}
ans += len > k;
pre = cur;
}
cout << ans << '\n';
}