玄关求调,麻烦大佬帮我看看错在哪里有什么更好的解决方法
  • 板块题目总版
  • 楼主封禁用户
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/5/12 09:07
  • 上次更新2024/5/12 11:25:10
查看原帖
玄关求调,麻烦大佬帮我看看错在哪里有什么更好的解决方法
668156
封禁用户楼主2024/5/12 09:07

前三个测试点AC了,后面七个TLE


#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, q, L, R;
    cin >> n >> q >> L >> R;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    for (int i = 0; i < q; i++) {
        int opt;
        cin >> opt;

        if (opt == 1) {
            int x;
            cin >> x;
            for (int j = 0; j < n; j++) {
                if (nums[j] >= L && nums[j] <= R) {
                    nums[j] += x;
                }
            }
            int idx = 0;
            for (int j = 0; j < n; j++) {
                if (nums[j] >= L && nums[j] <= R) {
                    nums[idx++] = nums[j];
                }
            }
            n = idx;
        } else if (opt == 2) {
            int count = 0;
            for (int j = 0; j < n; j++) {
                if (nums[j] >= L && nums[j] <= R) {
                    count++;
                }
            }
            cout << count << endl;
        }
    }

    return 0;
}

题目描述

给定nn个数aia_i,区间[L,R][L,R],以及qq个操作。
操作一:将所有保留的数加上xx,并删除不在给定区间[L,R][L,R]内的数。
操作二:询问还有多少数没有被删除。
对于每次操作二,输出结果。


输入格式

第一行包含四个整数n,q,L,Rn,q,L,R,含义如题面所示。
第二行输入一行nn个整数aia_i,含义如题面所示。
接下来qq行每行一次操作,输入一个整数optopt。
若opt=1opt=1,表示一次修改操作,输入一个整数xx,含义如题面所示。
若opt=2opt=2,表示一次询问操作。


输出格式

对于每次询问操作,输出一行一个整数,表示你的答案。


样例组

输入:5 3 1 5

1 2 3 4 5

2

1 -3

2

输出: 5

2


数据范围

对于20%的数据,满足1≤n,q≤1031\leq n,q\leq 10^3。
对于另外40%的数据,满足−103≤L≤R≤103-10^3\leq L\leq R\leq 10^3。
对于100%的数据,满足1≤n,q≤106,−109≤L≤ai≤R≤109,−109≤x≤1091\leq n,q\leq 10^6,-10^9\leq L\leq a_i\leq R\leq 10^9,-10^9\leq x\leq 10^9。

2024/5/12 09:07
加载中...