Cod sursa(job #1709323)

Utilizator ubb_oprimabuzurile_2016UBB - OprimAbuzurile2016 - Petru Bianca Cosmin ubb_oprimabuzurile_2016 Data 28 mai 2016 11:48:28
Problema Pq Scor 0
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#define LL long long
#define x first
#define y second
#define mp make_pair
#define DN 250005
using namespace std;

typedef pair<int,int> per;

int n,m,v[DN],ai[4*DN],rz[DN],lst[DN];
vector<per> q[DN];//st,ind

void ins(int vn,int l,int r,int p,int v) {
  if(l==r) {
    ai[vn]=max(ai[vn],v);
    return;
  }
  int m=(l+r)>>1,fs=(vn<<1);
  if(p<=m) ins(fs,l,m,p,v);
  else ins(fs+1,m+1,r,p,v);
  ai[vn]=max(ai[fs],ai[fs+1]);
}

int qu(int vn,int l,int r,int gl, int gr) {
  if(gl<=l && r<=gr) return ai[vn];
  if(l==r) return 0;
  int m=(l+r)>>1,fs=(vn<<1);
  return max(qu(fs,l,m,gl,gr),qu(fs+1,m+1,r,gl,gr));
}

int main() {
  //ifstream f("input.txt");
  ifstream f("pq.in");
  ofstream g("pq.out");
  f>>n>>m;
  for(int i=1; i<=n; ++i) f>>v[i];
  for(int i=0; i<m; ++i) {
    int a,b; f>>a>>b;
    q[b].push_back(mp(a,i));
  }
  for(int i=1; i<=n; ++i) {
    if(lst[v[i]]) {
      //cout<<i<<' '<<lst[v[i]]<<'\n';
      ins(1,1,n,lst[v[i]],i-lst[v[i]]);
    }
    lst[v[i]]=i;
    for(auto j:q[i]) rz[j.y]=qu(1,1,n,j.x,i);
  }
  for(int i=0; i<m; ++i) {
    if(rz[i]==0) rz[i]=-1;
    cout<<rz[i]<<'\n';
  }
}