#include <bits/stdc++.h>
using namespace std;
#define MAXN 500005
int a[MAXN];
map <int,int> mp;
int hsh = 0;
int ans[MAXN];
struct que
{
int l,r,id;
};
que queries[MAXN];
int BLOCK;
int cnt[MAXN];
bool cmp(que qa,que qb)
{
if(qa.l/BLOCK != qb.l/BLOCK)return qa.l < qb.l;
return qa.r < qb.r;
}
int res = 0;
void chk1(int br)
{
//++
if(cnt[br]==2)res++;
if(cnt[br]==3)res--;
}
void chk2(int br)
{
//--
if(cnt[br]==2)res++;
if(cnt[br]==1)res--;
}
int main()
{
ios_base::sync_with_stdio(false);
int n,q;
cin >> n >> q;
BLOCK = sqrt(n);
for(int i = 1; i <= n; i++)
{
cin >> a[i];
if(!mp[a[i]])mp[a[i]]=++hsh;
a[i]=mp[a[i]];
}
for(int i = 0; i < q; i++)cin >> queries[i].l >> queries[i].r,queries[i].id=i;
sort(queries,queries+q,cmp);
int L = 1;
int R = n;
for(int i = 1; i <= n; i++)cnt[a[i]]++;
for(int i = 1; i <= n; i++)if(cnt[i]==2)res++;
for(int i = 0; i < q; i++)
{
int l = queries[i].l;
int r = queries[i].r;
int idx = queries[i].id;
while(L < l)cnt[a[L]]--,L++,chk2(a[L]);
while(L > l)L--,cnt[a[L]]++,chk1(a[L]);
while(R > r)cnt[a[R]]--,R--,chk2(a[L]);
while(R < r)R++,cnt[a[R]]++,chk1(a[L]);
ans[idx]=res;
}
for(int i = 0; i < q; i++)cout << ans[i] << "\n";
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
2 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
3 |
Incorrect |
2 ms |
384 KB |
Output isn't correct |
4 |
Incorrect |
5 ms |
512 KB |
Output isn't correct |
5 |
Incorrect |
220 ms |
2680 KB |
Output isn't correct |
6 |
Incorrect |
227 ms |
2808 KB |
Output isn't correct |
7 |
Incorrect |
569 ms |
5368 KB |
Output isn't correct |
8 |
Incorrect |
1008 ms |
8216 KB |
Output isn't correct |
9 |
Incorrect |
1488 ms |
10488 KB |
Output isn't correct |
10 |
Incorrect |
2050 ms |
13176 KB |
Output isn't correct |