题意:输入长度不超100万的01串,然后给定n组查询i j,求出区间[min(i,j),max(i,j)]所有字符是否相同
题解:d[i]表示区间[d[i],i]的字符都一样,遍历一遍可求出d数组
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 1000010
using namespace std;
char s[MAXN];
int d[MAXN];
int main() {
int kase = 1;
while(scanf("%s",s) != EOF) {
int len = strlen(s);
char cur = 0;
for(int i = 0;i < len;i++) {
if(i==0 || s[i] != s[i-1]) {
cur = s[i];
d[i] = i;
} else {
d[i] = d[i-1];
}
}
int m;
scanf("%d",&m);
int a,b;
printf("Case %d:\n",kase++);
for(int i = 0;i < m;i++) {
scanf("%d%d",&a,&b);
int l = min(a,b);
int r = max(a,b);
if(d[r] <= l) {
printf("Yes\n");
} else {
printf("No\n");
}
}
}
return 0;
}