题目:
小易在维护数据的时候遇到一个需求,具体来说小易有一系列数据,这些数据了构成一个长度为n的数字序列,接下来小易会在这个序列上进行q次操作。
每次操作有一个查询的数字x,小易需要将序列数据中所有大于等于x的数字都减一,并输出在本次操作中有多少个数字被减一了。
小易犯了难,希望你能帮帮他。
思路:
这个题本身并不难,但是容易超时。稍微对数组处理下,即对数组排下序,比较失败后提前break跳出循环就不会超时了。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int cmp(const int &a, const int &b){
return a > b;
}
int main(){
vector<int> vec;
int n, q;
cin >> n;
cin >> q;
for (int i = 0; i < n; ++i){
int t;
cin >> t;
vec.push_back(t);
}
sort(vec.begin(), vec.end(), &cmp);
for (int i = 0; i < q; ++i){
int x;
cin >> x;
int count = 0;
for (int j = 0; j < vec.size(); ++j){
if (vec[j] >= x){
--vec[j];
++count;
}else{
break; // 比较失败提前跳出去
}
}
cout << count << endl;
}
}