Can anybody tell why this efficient java code gets TLE ? Could share any idea to optimize it ?
`
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
MyScanner cin = new MyScanner();
PrintWriter cout = new PrintWriter(new BufferedOutputStream(System.out));
int t,n,u,l,r,val,q,index,ans;
int BIT[] = new int[10011];
t = cin.nextInt();
while(t > 0)
{
t--;
n = cin.nextInt();
u = cin.nextInt();
for(int i = 0; i<u; i++)
{
l = cin.nextInt();;
r = cin.nextInt();
val = cin.nextInt();
update(BIT,n,l,val);
if(r+1 < n) update(BIT,n,r+1,-val);
}
q = cin.nextInt();
while(q > 0)
{
q--;
index = cin.nextInt();
ans = getSum(BIT,index+1);
cout.println(ans);
}
for(int i = 0; i<=n; i++)
{
BIT[i] = 0;
}
}
cout.close();
}
static void update(int BIT[],int n,int idx,int val)
{
idx ++;
while(idx <= n)
{
BIT[idx] += val;
idx += (idx & (-idx));
}
}
static int getSum(int BIT[],int idx)
{
int val = 0;
while(idx > 0)
{
val += BIT[idx];
idx -= (idx & (-idx));
}
return val;
}
//-----------MyScanner class for faster input----------
static class MyScanner {
BufferedReader br;
StringTokenizer st;
public MyScanner() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine(){
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
`