请问为什么WATLE

假如现在有一个序列a[],有两种操作
1、给出k,在原序列第k和k+1个数之间插入一个数
2、给出k,询问当前第k个数是多少
假如我们使用数组维护,那么插入操作的时间复杂度是O(n),查询操作的时间复杂度是O(1)
同时我们也知道了用指针可以完成这个问题,那么我们是否可以用数组来模拟指针的情况呢?
请聪明的读者自行思考这个问题
Input
第一行两个数 n,q,表示原序列长度为 n,操作次数为 q
第二行包括 n 个数,表示原序列
接下来 q 行每行第一个数 op 表示操作类型
1 操作包括两个数 k,val 表示在第 k 和第 k+1 个数之间插入一个数 val
2 操作包括一个数 k 表示询问第 k 个数的值
Output
输出包括若干行,每行对应一个 2 操作询问的结果
Constraint
2≤n≤200000
询问次数 ≤200000
其中 2 操作次数 ≤100
Sample Input
3 2
3 2 1
1 2 4
2 3
Sample Output
4

#include<bits/stdc++.h>
using namespace std;
int n,q,a[400010]={},op;
int main(){
    int k,val;
    scanf("%d %d",&n,&q);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    while(q--){
        scanf("%d",&op);
        if(op==1){  
            scanf("%d%d",&k,&val);
            for(int i=n;i>k;i--){
                a[i+1]=a[i];
            }
            a[k+1]=val;
            n=n+1;
        }else{
            scanf("%d",&k);
            printf("%d\n",a[k]);
        }
    }
    return 0;
}