为什么在main外面的方法定义的vector会WA on test2而在里面定义的vector就A了?而且里面的定义方法是个什么意思?
#include<bits/stdc++.h>
#define N 300010
using namespace std;
inline void read(int& x)
{
x=0;int y=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')y=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
x=x*y;
}
int t,n,q;
char s[N];
int sum[N];
//vector<int> pos[N<<2];
int main(){
read(t);
for(int heq=1;heq<=t;heq++)
{
read(n),read(q);
vector<vector<int>> pos(2 * n + 1);
scanf("%s",s+1);
pos[n].push_back(0);
sum[0]=n;
for(int i=1;i<=n;i++)
{
if(i&1)
{
if(s[i]=='+')sum[i]=sum[i-1]+1;
else sum[i]=sum[i-1]-1;
pos[sum[i]].push_back(i);
}
else
{
if(s[i]=='+')sum[i]=sum[i-1]-1;
else sum[i]=sum[i-1]+1;
pos[sum[i]].push_back(i);
}
}
for(int i=1,l,r;i<=q;i++)
{
read(l),read(r);
int tmp=sum[r]-sum[l-1];
if(!tmp)
{
printf("0\n");
continue;
}
if(abs(tmp)&1)
{
printf("1\n");
int val;
if(tmp>0)val=sum[l-1]+tmp/2+1;
if(tmp<0)val=sum[l-1]+tmp/2-1;
printf("%d\n",*lower_bound(pos[val].begin(),pos[val].end(),l));
}
if(abs(tmp)%2==0)
{
printf("2\n");
int val;
tmp=sum[r-1]-sum[l-1];
if(tmp>0)val=sum[l-1]+tmp/2+1;
if(tmp<0)val=sum[l-1]+tmp/2-1;
printf("%d %d\n",*lower_bound(pos[val].begin(),pos[val].end(),l),r);
}
}
}
return 0;
}