fzu2226

#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  ;
}

你可能感兴趣的:(fzu2226)