二维vector,用resize就可以ac,连续pushback却不行,为什么?

P3613 【深基15.例2】寄包柜

OKM_IS @ 2023-11-22 18:53:09

#include<iostream>
#include<vector>
using namespace std;
int main(){
    int n,q;
    cin>>n>>q;
    vector<vector<int> > a(100005);
    int op1,op2,op3,op4;
    for(int i=1;i<=q;i++){
        cin>>op1;

        if(op1==1){
            cin>>op2>>op3>>op4;
            if(a[op2].size()<op3)a[op2].resize(op3+5);//for(int i=1;i<=op3-a[op2].size();i++)a[op2].push_back(0);
            a[op2][op3-1]=op4;
        }

        if(op1==2){
            cin>>op2>>op3;
            cout<<a[op2][op3-1]<<'\n';
        }

    }
    return 0;
}

被注释掉的部分是连续push_back,但是提交就全RE,而不是TLE(除了subtask#1可以通过),这是为什么呢?求解答!


by StenvenPig @ 2023-11-22 19:39:33

@OKM_IS 1是俩循环i会死循环 2是你这种vector写法好像就是要用resize(少用这个的蒟蒻不太懂)


by OKM_IS @ 2023-11-22 20:02:34

@StenvenPig 不应该啊。。。用push_back的话,subtask#1是可以过的,而且样例也可以,但是前五个检测点就RE了。然后i的话应该是局部变量,第二个for那里结束的话i就会变成之前的值才对,而且死循环应该TLE吧。。。


by StenvenPig @ 2023-11-22 20:09:31

@OKM_IS vector<st> v[100010];我这个能push_back进去,定的写法的问题吧


by StenvenPig @ 2023-11-22 20:10:36

@OKM_IS 二维不应该是这种吗 vector<int> v[100010];


by OKM_IS @ 2023-11-22 21:43:21

@StenvenPig 看了下书上说两种写法都可以,但是应该不是这个问题导致RE


by OKM_IS @ 2023-11-22 22:17:17

已解决.....i增大的同时,size也在扩大,循环的退出条件写的比较复杂导致的问题


|