# LightOJ - 1188 Fast Queries(离线树状数组)

Fast Queries

Given an array of N integers indexed from 1 to N, and q queries, each in the form i j, you have to find the number of distinct integers from index i to j(inclusive).

# Input

Input starts with an integer T (≤ 5), denoting the number of test cases.

The first line of a case is a blank line. The next line contains two integers N (1 ≤ N ≤ 105)q (1 ≤ q ≤ 50000). The next line contains N space separated integers forming the array. There integers range in [0, 105].

Each of the next q lines will contain a query which is in the form i j (1 ≤ i ≤ j ≤ N).

# Output

For each test case, print the case number in a single line. Then for each query you have to print a line containing number of distinct integers from index i to j.

1

8 5

1 1 1 2 3 5 1 2

1 8

2 3

3 6

4 5

4 8

Case 1:

4

1

4

2

4

# Note

对于当前a[i],如果之前出现过了，则把上次出现的位置 -1，当前位置 +1.

然后若有查询区间的右区间等于i,查询该区间，把答案保存下来。

#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <map>
#include <iostream>

using namespace std;
const int N = 100010;

int n,q;
struct node {
int l,r;
int id;
} Q[N*5];

int vis[N],a[N];
int ans[N*5];

bool cmp(node a,node b) {
return a.r<b.r;
}

int bit[N];

while(i<=n) {
bit[i]+=v;
i+=i&-i;
}
}

int sum(int i) {
int res=0;
while(i>0) {
res+=bit[i];
i-=i&-i;
}
return res;
}

int main() {
//freopen("test.in","r",stdin);
int t,ca=1;
cin>>t;
while(t--) {
scanf("%d%d",&n,&q);
for(int i=1; i<=n; i++)scanf("%d",&a[i]);
for(int i=1; i<=q; i++) {
scanf("%d%d",&Q[i].l,&Q[i].r);
Q[i].id=i;
}
sort(Q+1,Q+q+1,cmp);
memset(bit,0,sizeof bit);
memset(vis,0,sizeof vis);
int la=1;
for(int i=1; i<=n; i++) {
vis[a[i]]=i;
while(la<=q&&Q[la].r==i) {
ans[Q[la].id]=sum(Q[la].r)-sum(Q[la].l-1);
la++;
}
if(la>q)break;
}
printf("Case %d:\n",ca++);
for(int i=1; i<=q; i++) {
printf("%d\n",ans[i]);
}
}
return 0;
}


• 本文已收录于以下专栏：

## LightOJ 1188 Fast Queries(离线树状数组)

• sinat_30126425
• 2016年02月28日 20:23
• 233

## 1188 - Fast Queries Lightoj

1.扫描线 2.使相同的点尽量靠右
• Yukar_syt
• 2012年08月08日 18:27
• 1227

## Light OJ 1188 Fast Queries （树状数组离线）

• swust_lian
• 2016年08月06日 15:09
• 217

## Lightoj1188 Fast Queries(树状数组离线)

• KIJamesQi
• 2016年08月02日 22:55
• 203

## 1188 - Fast Queries (莫队算法)

1188 - Fast Queries PDF (English) Statistics Forum Time Limit...
• ZSGG_ACM
• 2015年11月25日 11:53
• 651

## Light OJ 1188 Fast Queries（离线树状数组||莫队算法）

• aaaaacmer
• 2016年03月03日 21:53
• 460

## LightOj 1188 树状数组

LightOj 1188 题目链接： http://www.bnuoj.com/v3/problem_show.php?pid=13000 题意： 给一个数列(len ...
• beihai2013
• 2016年01月17日 23:44
• 109

## lightoj1100 - Again Array Queries

1100 - Again Array Queries PDF (English) Statistics Forum Time Limit: ...
• R1986799047
• 2015年10月25日 17:08
• 269

## LightOJ 1118 树状数组+离线

• Lifel
• 2017年09月01日 17:11
• 74

## Light OJ 1188 Fast Queries(分块暴力）

In a strange city, houses are built in a straight line one after another. There are several communit...
• u013582254
• 2015年08月17日 19:30
• 551

举报原因： 您举报文章：LightOJ - 1188 Fast Queries(离线树状数组) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)