题目大意:给定一个由1和2组成的序列,多次询问是否存在一个区间满足区间和=
如果
如果存在一个前缀和为
否则一定存在一个前缀和
然后我们将左右端点同时右移 显然如果某一时刻
如果
如果
否则无解
#include
#include
#include
#include
#define M 2002002 using namespace std; int n,m,sum; char s[M>>1]; int ext[M],l[M],r[M]; int main() { int i,x; cin>>n>>m; scanf("%s",s+1); for(i=n;i;i--) { ext[i]=ext[i+1]+1; if(s[i]=='W') ext[i]=0; } for(i=1;i<=n;i++) { sum+=s[i]=='W'?1:2; l[sum]=1;r[sum]=i; if(s[i]=='T') { if(ext[1]
sum || !l[x] ) puts("NIE"); else printf("%d %d\n",l[x],r[x]); } return 0; }