问题描述
给定一个数组 A=\left(a_1, a_2, \cdots, a_n\right)A=(a1,a2,⋯,an), 请对该数组执行 mm 次修改或查询操作: 若操作为 1 x y1xy, 表示将 a_xax 的值修改为 yy;
若操作为 2 l r p2lrp 表示求 a_pap 在 a_l, a_{l+1}, \cdots, a_ral,al+1,⋯,ar 中是第几小的(比 a_pap 小的元 素个数加 1)。
输入格式
输入的第一行包含一个整数 nn 。
第二行包含 nn 个整数 a_1, a_2, \cdots, a_na1,a2,⋯,an, 表示数组中每个数的初始值, 相邻的 整数之间用一个空格分隔。
第三行包含一个整数 mm 。
接下来 mm 行每行包含一个操作, 可能是 1 x_i y_i1xiyi 或 2 l_i r_i p_i2liripi, 相邻的整数之 间用一个空格分隔。
输出格式
输出一行, 包含多个整数, 相邻的整数之间用一个空格分隔, 依次表示第 二种操作的答案。
样例输入
3
1 2 3
3
2 1 3 2
1 2 4
2 1 3 2
样例输出
2 3
评测用例规模与约定
对于 20 %20 的评测用例, n \leq 500n≤500 ;
对于 40 %40 的评测用例, n \leq 5000n≤5000;
对于所有评测用例, 1 \leq n \leq 100000,1 \leq m \leq 2 n, 1 \leq a_i, y_i \leq 10^61≤n≤100000,1≤m≤2n,1≤ai,yi≤106, 1 \leq x_i \leq n, \quad 1 \leq l_i \leq p_i \leq r_i \leq n \circ1≤xi≤n,1≤li≤pi≤ri≤n∘
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
完整代码
#include<iostream>
using namespace std;
const int N = 100;
int a[N], b[N][10], n1, n2;
int main()
{
cin >> n1;
for (int i = 1; i <= n1; i++)
{
cin >> a[i];
}//输入数据
cin >> n2;
for (int j = 1; j <= n2; j++)
{
cin >> b[j][1];
if (b[j][1] == 1)
for (int i = 2; i < 4; i++)
cin >> b[j][i];
else
for (int i = 2; i < 5; i++)
cin >> b[j][i];
}//输入指令
for (int j = 1; j <= n2; j++)
{
if (b[j][1] == 1)
{
a[b[j][2]] = b[j][3];
//cout<<"("<<a[b[j][2]]<<")"<<endl;//输出检测更改值是否成功
}
else
{
int ans = 1;
int min = a[b[j][4]];
for (int i = 2; i < 5; i++)
{
if (a[b[j][i]] < min)
ans++;
}
cout << ans << " ";
}
}
return 0;
}
运行截图
在蓝桥杯官网测试的时候一个都不通过,我也不道为啥,麻了。。。