# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
260514 | sckmd | Poklon (COCI17_poklon) | C++14 | 2017 ms | 12960 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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[R]);
while(R < r)R++,cnt[a[R]]++,chk1(a[R]);
ans[idx]=res;
}
for(int i = 0; i < q; i++)cout << ans[i] << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |