前三个测试点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;
}
题目描述
给定n个数ai,区间[L,R],以及q个操作。
操作一:将所有保留的数加上x,并删除不在给定区间[L,R]内的数。
操作二:询问还有多少数没有被删除。
对于每次操作二,输出结果。
输入格式
第一行包含四个整数n,q,L,R,含义如题面所示。
第二行输入一行n个整数ai,含义如题面所示。
接下来q行每行一次操作,输入一个整数opt。
若opt=1,表示一次修改操作,输入一个整数x,含义如题面所示。
若opt=2,表示一次询问操作。
输出格式
对于每次询问操作,输出一行一个整数,表示你的答案。
样例组
输入:5 3 1 5
1 2 3 4 5
2
1 -3
2
输出: 5
2
数据范围
对于20%的数据,满足1≤n,q≤103。
对于另外40%的数据,满足−103≤L≤R≤103。
对于100%的数据,满足1≤n,q≤106,−109≤L≤ai≤R≤109,−109≤x≤109。