답안 #260512

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
260512 2020-08-10T12:27:13 Z sckmd Poklon (COCI17_poklon) C++14
0 / 140
5000 ms 18680 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;
  BLOCK = sqrt(n);
  cin >> n >> q;
  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 1 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 20 ms 512 KB Output isn't correct
5 Execution timed out 5008 ms 3832 KB Time limit exceeded
6 Execution timed out 5094 ms 3704 KB Time limit exceeded
7 Execution timed out 5091 ms 7672 KB Time limit exceeded
8 Execution timed out 5093 ms 11512 KB Time limit exceeded
9 Execution timed out 5074 ms 15096 KB Time limit exceeded
10 Execution timed out 5092 ms 18680 KB Time limit exceeded