Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e5 + 5e2;
- #define rg (p << 1) | 1
- #define lf (p << 1)
- string s;
- int n ,q;
- string Read(){
- static char Buff[N];
- scanf("%s" ,Buff);
- return Buff;
- }
- class SegTree{
- private:
- vector< set< char > > Seg;
- void Compain(set< char > &Res ,set< char > &a ,set< char > &b) {
- for(auto i : a) Res.insert(i);
- for(auto i : b) Res.insert(i);
- }
- void BLD(int p ,int L ,int R) {
- if( L == R ){
- Seg[p].insert( s[L] );
- return;
- }
- int Mid = (L + R) >> 1;
- BLD(lf ,L ,Mid);
- BLD(rg ,Mid + 1 , R);
- Compain(Seg[p] ,Seg[lf] ,Seg[rg]);
- }
- set< char > QRY(int i ,int j ,int p ,int L ,int R){
- if( R < i || j < L ) return set< char >();
- if( i <= L && R <= j ) return Seg[p];
- int Mid = (L + R) >> 1;
- set< char > LF = QRY(i ,j ,lf ,L ,Mid);
- set< char > RG = QRY(i ,j ,rg ,Mid + 1 ,R);
- set< char > Res; Compain(Res ,LF ,RG);
- return Res;
- }
- public:
- SegTree(){}
- void BLD(int Sz){
- Seg.assign(Sz * 4 ,set< char >());
- BLD(1 ,0 ,n - 1);
- }
- int QRY(int L ,int R){
- set< char > Q = QRY(L ,R ,1 ,0 ,n - 1);
- return (int)Q.size();
- }
- } ST ;
- inline void Solve(){
- int L ,R; scanf("%d%d" ,&L ,&R);
- int Q = ST.QRY(L - 1 ,R - 1);
- bool flag = (R == L || Q > 1);
- puts( flag ? "Yes" : "No" );
- }
- int main() {
- s = Read();
- n = s.size();
- ST.BLD(n);
- scanf("%d" ,&q);
- while( q-- ) Solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement