#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S min_L( S a,T b) {
return a<= b? a: b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int N;
int lf[ 3 ] [ 50000 ] ;
int rg[ 3 ] [ 50000 ] ;
class Solution{
public :
vector< int > shortestDistanceColor( vector< int > & colors, vector< vector< int >> & q) {
int i;
int j;
int k;
int t;
vector< int > res;
N = colors.size ( ) ;
for ( i= 0 ; i< ( N) ; i++ ) {
for ( k= 0 ; k< ( 3 ) ; k++ ) {
if ( i== 0 ) {
lf[ k] [ i] = - 1073709056 ;
}
else {
lf[ k] [ i] = lf[ k] [ i- 1 ] ;
}
if ( colors[ i] == k+ 1 ) {
lf[ k] [ i] = i;
}
}
}
for ( i= N- 1 ; i>= 0 ; i-- ) {
for ( k= 0 ; k< ( 3 ) ; k++ ) {
if ( i== N- 1 ) {
rg[ k] [ i] = 1073709056 ;
}
else {
rg[ k] [ i] = rg[ k] [ i+ 1 ] ;
}
if ( colors[ i] == k+ 1 ) {
rg[ k] [ i] = i;
}
}
}
for ( k= 0 ; k< ( q.size ( ) ) ; k++ ) {
i = q[ k] [ 0 ] ;
j = q[ k] [ 1 ] - 1 ;
t = min_L( i- lf[ j] [ i] , rg[ j] [ i] - i) ;
if ( t > N) {
t = - 1 ;
}
res.push_back ( t) ;
}
return res;
}
}
;
// cLay varsion 20190914-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N;
// int lf[3][50000], rg[3][50000];
//
// class Solution {
// public:
// vector<int> shortestDistanceColor(vector<int>& colors, vector<vector<int>>& q) {
// int i, j, k, t;
// vector<int> res;
//
// N = colors.size();
// rep(i,N){
// rep(k,3){
// if(i==0) lf[k][i] = -int_inf;
// else lf[k][i] = lf[k][i-1];
// if(colors[i]==k+1) lf[k][i] = i;
// }
// }
// for(i=N-1;i>=0;i--){
// rep(k,3){
// if(i==N-1) rg[k][i] = int_inf;
// else rg[k][i] = rg[k][i+1];
// if(colors[i]==k+1) rg[k][i] = i;
// }
// }
//
// rep(k,q.size()){
// i = q[k][0];
// j = q[k][1] - 1;
// t = min(i-lf[j][i], rg[j][i]-i);
// if(t > N) t = -1;
// res.push_back(t);
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIG1pbl9MKFMgYSxUIGIpewogIHJldHVybiBhPD1iP2E6YjsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmludCBOOwppbnQgbGZbM11bNTAwMDBdOwppbnQgcmdbM11bNTAwMDBdOwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgdmVjdG9yPGludD4gc2hvcnRlc3REaXN0YW5jZUNvbG9yKHZlY3RvcjxpbnQ+JiBjb2xvcnMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIHEpewogICAgaW50IGk7CiAgICBpbnQgajsKICAgIGludCBrOwogICAgaW50IHQ7CiAgICB2ZWN0b3I8aW50PiByZXM7CiAgICBOID0gY29sb3JzLnNpemUoKTsKICAgIGZvcihpPTA7aTwoTik7aSsrKXsKICAgICAgZm9yKGs9MDtrPCgzKTtrKyspewogICAgICAgIGlmKGk9PTApewogICAgICAgICAgbGZba11baV0gPSAtMTA3MzcwOTA1NjsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgIGxmW2tdW2ldID0gbGZba11baS0xXTsKICAgICAgICB9CiAgICAgICAgaWYoY29sb3JzW2ldPT1rKzEpewogICAgICAgICAgbGZba11baV0gPSBpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yKGk9Ti0xO2k+PTA7aS0tKXsKICAgICAgZm9yKGs9MDtrPCgzKTtrKyspewogICAgICAgIGlmKGk9PU4tMSl7CiAgICAgICAgICByZ1trXVtpXSA9IDEwNzM3MDkwNTY7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICByZ1trXVtpXSA9IHJnW2tdW2krMV07CiAgICAgICAgfQogICAgICAgIGlmKGNvbG9yc1tpXT09aysxKXsKICAgICAgICAgIHJnW2tdW2ldID0gaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZvcihrPTA7azwocS5zaXplKCkpO2srKyl7CiAgICAgIGkgPSBxW2tdWzBdOwogICAgICBqID0gcVtrXVsxXSAtIDE7CiAgICAgIHQgPW1pbl9MKGktbGZbal1baV0sIHJnW2pdW2ldLWkpOwogICAgICBpZih0ID4gTil7CiAgICAgICAgdCA9IC0xOwogICAgICB9CiAgICAgIHJlcy5wdXNoX2JhY2sodCk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDE5MDkxNC0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBOOwovLyBpbnQgbGZbM11bNTAwMDBdLCByZ1szXVs1MDAwMF07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICB2ZWN0b3I8aW50PiBzaG9ydGVzdERpc3RhbmNlQ29sb3IodmVjdG9yPGludD4mIGNvbG9ycywgdmVjdG9yPHZlY3RvcjxpbnQ+PiYgcSkgewovLyAgICAgaW50IGksIGosIGssIHQ7Ci8vICAgICB2ZWN0b3I8aW50PiByZXM7Ci8vIAovLyAgICAgTiA9IGNvbG9ycy5zaXplKCk7Ci8vICAgICByZXAoaSxOKXsKLy8gICAgICAgcmVwKGssMyl7Ci8vICAgICAgICAgaWYoaT09MCkgbGZba11baV0gPSAtaW50X2luZjsKLy8gICAgICAgICBlbHNlICAgICBsZltrXVtpXSA9IGxmW2tdW2ktMV07Ci8vICAgICAgICAgaWYoY29sb3JzW2ldPT1rKzEpIGxmW2tdW2ldID0gaTsKLy8gICAgICAgfQovLyAgICAgfQovLyAgICAgZm9yKGk9Ti0xO2k+PTA7aS0tKXsKLy8gICAgICAgcmVwKGssMyl7Ci8vICAgICAgICAgaWYoaT09Ti0xKSByZ1trXVtpXSA9IGludF9pbmY7Ci8vICAgICAgICAgZWxzZSAgICAgICByZ1trXVtpXSA9IHJnW2tdW2krMV07Ci8vICAgICAgICAgaWYoY29sb3JzW2ldPT1rKzEpIHJnW2tdW2ldID0gaTsKLy8gICAgICAgfQovLyAgICAgfQovLyAKLy8gICAgIHJlcChrLHEuc2l6ZSgpKXsKLy8gICAgICAgaSA9IHFba11bMF07Ci8vICAgICAgIGogPSBxW2tdWzFdIC0gMTsKLy8gICAgICAgdCA9IG1pbihpLWxmW2pdW2ldLCByZ1tqXVtpXS1pKTsKLy8gICAgICAgaWYodCA+IE4pIHQgPSAtMTsKLy8gICAgICAgcmVzLnB1c2hfYmFjayh0KTsKLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK