#include <iostream> #include <string> #include <string.h> #include <vector> #include <stdio.h> #include <algorithm> #include <map> #include <math.h> typedef long long LL ; std::vector<int> id[1001] ; std::vector<std::pair<int , int> > askL , askR ; int leastLeft[10008] , leastRight[10008]; int res[10008] ; int main(){ std::ios::sync_with_stdio(false) ; int n , x , m , l , r ; while(scanf("%d",&n) != EOF){ for(int i = 1 ; i <= 1000 ; i++) id[i].clear() ; askL.clear() ; askR.clear() ; for(int i = 1 ; i <= n ; i++){ scanf("%d" ,&x) ; id[x].push_back(i) ; } scanf("%d" , &m) ; for(int i = 0 ; i < m ; i++){ scanf("%d%d" , &l , &r) ; askL.push_back(std::make_pair(l , i)) ; askR.push_back(std::make_pair(r , i)) ; } std::sort(askL.begin() , askL.end()) ; std::sort(askR.begin() , askR.end()) ; memset(res , 0 , sizeof(res)) ; for(int oo = 1 ; oo <= 1000 ; oo++){ int i = 0 ; memset(leastRight , -1 , sizeof(leastRight)) ; for(std::vector<int>::iterator it = id[oo].begin() ; it != id[oo].end() ; it++){ while(i < askL.size() && askL[i].first <= *it){ leastRight[askL[i].second] = *it ; i++ ; } } i = askR.size() - 1 ; memset(leastLeft , -1 , sizeof(leastLeft)) ; for(std::vector<int>::reverse_iterator it = id[oo].rbegin() ; it != id[oo].rend() ; it++){ while(i >= 0 && askR[i].first >= *it){ leastLeft[askR[i].second] = *it ; i-- ; } } for(int i = 0 ; i < m ; i++) res[i] = std::max(res[i] , leastLeft[i] - leastRight[i]) ; } for(int i = 0 ; i < m ; i++) printf("%d\n" , res[i]) ; } return 0 ; }