1 条题解
-
0
📝 题目大意
给定一个长度为 的数组 ,处理 次操作:类型 1 将 更新为 ,类型 2 查询并输出 的值。
💡 解题思路
-
题目分析:,每次操作需要 完成。题目本质是数组的单点修改与单点查询,直接使用数组即可,无需任何高级数据结构。
-
算法推导:
- 用数组
a[N]存储序列,下标从 1 开始。 - 对于每个查询:
- 若
op == 1:读入x,执行a[k] = x(单点修改)。 - 若
op == 2:直接输出a[k](单点查询)。
- 若
- 由于每次操作都是 ,总复杂度 。
- 用数组
-
边界与细节:
- 数组大小需开到 的最大值以上(std.cpp 中开到 )。
- 下标从 1 开始,与输入保持一致。
- 和 的范围可达 ,使用
int足够(32 位有符号整型上限约 )。
⏱️ 复杂度分析
- 时间复杂度:,读入数组 ,处理 次查询每次 。
- 空间复杂度:,仅需存储长度为 的数组。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; #define N 110000 // 数组最大长度,略大于 10^5 int a[N]; // 全局数组,存储序列 A int main() { int n; scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); // 读入初始序列(下标从 1 开始) int q; scanf("%d", &q); while(q--) { int op, k, x; scanf("%d%d", &op, &k); if(op == 1) // 类型 1:单点修改 { scanf("%d", &x); a[k] = x; // 将 A_k 更新为 x } else // 类型 2:单点查询 printf("%d\n", a[k]); // 输出 A_k } return 0; } -
- 1
信息
- ID
- 666
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者