如果你用数组,看看自己有没有看错数据范围,n≤2×106,得开到 2000005。
如果你用的是 vector,建议好好看看教材,vector 默认长度为 0,读入时把:
for(int i = 1; i <= n; i++){
    cin >> a[i]; 
}
换成:
for(int i = 1; i <= n; i++){
    int tmp;
    cin >> tmp; 
    a.push_back(tmp);
}
注意,vector 下标同样从 0 开始,这样写的话,输出要写 a[p - 1](p 是查询的序号)。
可以提前塞一个无关数据占位,使下标与序号一一对应。