AcWing 1571. 完美序列---双指针
原题链接
简单
作者:
巨鹿噜噜噜路
,
2020-06-10 09:42:31
,
所有人可见
,
阅读 1852
- $i$指向最大的数
- $j$指向最小的数
- 如果不符合$M≤m×p$ 则向右移动$j$指针,直至符合条件为止
C++ 代码
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX_N = 100010;
int n;
long long arr[MAX_N], p;
int main() {
cin >> n >> p;
for(int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
int cnt = 0;
for(int i = 0, j = 0; i < n; i++) {
while(j < n && arr[i] > arr[j] * p) j++;
cnt = max(cnt, i - j + 1);
}
printf("%d", cnt);
return 0;
}
如果以i为左端点,j为右端点为什么会超时
跟大佬思路一模一样,就是没开long long一直不AC
大佬,请问为什么我这段代码不能AC呢?
因为这种做法只考虑到了两个情况,以最左边的数为最小值的最大区间长度和以最右边的数为最大值的最大区间长度
i为啥最开始不是指向a[n]?
我也不知道
我也不知道
好
好妙的做法呀!