답안 #260514

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
260514 2020-08-10T12:29:16 Z sckmd Poklon (COCI17_poklon) C++14
0 / 140
2017 ms 12960 KB
#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;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 384 KB Output isn't correct
2 Incorrect 1 ms 384 KB Output isn't correct
3 Incorrect 1 ms 384 KB Output isn't correct
4 Incorrect 5 ms 512 KB Output isn't correct
5 Incorrect 214 ms 2808 KB Output isn't correct
6 Incorrect 214 ms 2808 KB Output isn't correct
7 Incorrect 568 ms 5368 KB Output isn't correct
8 Incorrect 1000 ms 8004 KB Output isn't correct
9 Incorrect 1477 ms 10492 KB Output isn't correct
10 Incorrect 2017 ms 12960 KB Output isn't correct