关于vector的定义
查看原帖
关于vector的定义
284715
遮云壑楼主2021/10/27 22:10

为什么在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;
}
2021/10/27 22:10
加载中...