【网易编程题】序列维护

题目:
小易在维护数据的时候遇到一个需求,具体来说小易有一系列数据,这些数据了构成一个长度为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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章