#include <iostream> #include <cmath> using namespace std; #define N 300004 int d[N]; int distance(int n); int main() { //把每个要删除的数字的位置记录下来 //并且计算出他们到自己前面的2的次方的距离 //找到距离非0的位置,看前面有几个距离为0,若数量大于自己的距离,直接删除,若小于,则要取最大 int n, k, j = 0, result = 0, t; cin >> n >> k; for (int i = 0; i < n; i++) { cin >> t; if (t == k) d[j++] = distance(i + 1); //记录每个值到最近的2的次方的距离+1 即删除该数所需的操作数 } for (int i = 0; i < j; i++) //从左到右扫描指定值 { if (!d[i] || d[i] < result) result++; else result = max(result, d[i]); } cout << result << endl; } int distance(int n) { for (int i = 0; i < n; i++) { if (pow(2, i) == n) return 0; else if (pow(2, i) > n) return n - pow(2, i - 1) + 1; } }
标签:include,int,cin,距离,++,result,P1719 From: https://www.cnblogs.com/lhf123/p/17413548.html