# Code for DQUERY getting WA even after implementing it the same as the correct solution

Referred Anudeep Nekkanti’s blogpost to write the solution in Java but I’m getting WA.
Anudeep’s blogpost

Here’s my code:

``````import java.io.*;
import java.util.*;

class Pair<T, U, V>
{
T f;
U s;
V i;
public Pair(T Integer1, U Integer2, V i)
{
f=Integer1; s=Integer2;this.i=i;
}
T first()
{
return f;
}
U second()
{
return s;
}
V geti()
{
return i;
}
}

class Main
{
static int[] a, counter, ans;
static int n, count;
static int BLOCK;

{
if(counter[a[index]] == 0)
count++;
}

static void remove(int index)
{
if(counter[a[index]] == 1)
count--;
}

public static void main(String[] args) throws Exception
{
Scanner sc= new Scanner(System.in);

int n= sc.nextInt();
Main.n =n;
BLOCK=(int)Math.sqrt(n);
a= new int[n+2];
for(int i=1; i<=n; i++)
{
a[i]= sc.nextInt();
}
int q= sc.nextInt();
ans= new int[q];

List<Pair<Integer, Integer, Integer>> list= new ArrayList<Pair<Integer, Integer, Integer>>();
for(int k=0; k<q; k++)
{
}

list.sort(new Comparator<Pair<Integer, Integer, Integer>>() {
@Override
public int compare(Pair<Integer, Integer, Integer> o1, Pair<Integer, Integer, Integer> o2) {
if (o1.first()/BLOCK > o2.first()/BLOCK)
{
return 1;
}
else if ((o1.first()/BLOCK) == (o2.first()/BLOCK))
{
if(o1.second() > o2.second())
return 1;
else
return -1;
}
else
{
return -1;
}
}
});

counter= new int[3000000];
int currentL=1, currentR=1;
for(int m=0;m<q;m++)
{
while(currentL < list.get(m).first())
{
remove(currentL);
counter[a[currentL]]--;
currentL++;
}
while(currentL >= list.get(m).first())
{
counter[a[currentL]]++;
currentL--;
}
while(currentR > list.get(m).second())
{
remove(currentR);
counter[a[currentR]]--;
currentR--;
}
while(currentR <= list.get(m).second())
{
counter[a[currentR]]++;
currentR++;
}

ans[list.get(m).geti()]= count;
}

for(int m=0;m<q;m++)
{
System.out.println(ans[m]);
}
}

}
``````

My DQUERY Java solution

My code passes the test for sample input and for
1
1
1
1 1

it gives answer 1 which I think is correct.