1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include <iostream> #include <cstring> using namespace std;
typedef unsigned long long ULL; const int N=1e5+10; int P=131; ULL p[N],h[N];
ULL get(int l,int r) { return h[r]-h[l-1]*p[r-l+1]; }
int main() { int n,m; cin>>n>>m;
char s[N]; cin>>s+1; p[0]=1; h[0]=0; for(int i=1;i<=n;i++) { p[i]=p[i-1]*P; h[i]=h[i-1]*P+s[i]; } while(m--) { int l1,r1,l2,r2; cin>>l1>>r1>>l2>>r2; if(get(l1,r1)==get(l2,r2)) puts("Yes"); else puts("No"); } }
|