제출 #610875

#제출 시각아이디문제언어결과실행 시간메모리
610875racsosabePoklon (COCI17_poklon)C++14
126 / 140
5069 ms14176 KiB
#include<bits/stdc++.h> using namespace::std; const int N = 500000 + 5; const int bsize = 710; int n; int q; int a[N]; int id[N]; int ans[N]; int L[N], R[N]; void compress(){ set<int> S; for(int i = 1; i <= n; i++) S.emplace(a[i]); int len = 0; map<int, int> id; for(int x : S){ id[x] = len++; } for(int i = 1; i <= n; i++) a[i] = id[a[i]]; } void solve(){ vector<int> queries(q); iota(queries.begin(), queries.end(), 1); sort(queries.begin(), queries.end(), [&] (int i, int j){ if(id[i] == id[j]) return id[i] & 1 ? R[i] < R[j] : R[i] > R[j]; return id[i] < id[j]; }); unordered_map<int, int> cnt; cnt.reserve(524288 >> 1); cnt.max_load_factor(0.25); int cur = 0; int l = 1, r = 1; for(int at : queries){ while(r <= R[at]){ cnt[a[r]]++; if(cnt[a[r]] == 2) cur++; else if(cnt[a[r]] == 3) cur--; r += 1; } while(L[at] < l){ l--; cnt[a[l]]++; if(cnt[a[l]] == 2) cur++; else if(cnt[a[l]] == 3) cur--; } while(l < L[at]){ cnt[a[l]]--; if(cnt[a[l]] == 1) cur--; else if(cnt[a[l]] == 2) cur++; l++; } while(R[at] + 1 < r){ r--; cnt[a[r]]--; if(cnt[a[r]] == 1) cur--; else if(cnt[a[r]] == 2) cur++; } ans[at] = cur; } } int main(){ scanf("%d %d", &n, &q); for(int i = 1; i <= n; i++) scanf("%d", a + i); //compress(); for(int i = 1; i <= q; i++){ scanf("%d %d", L + i, R + i); id[i] = L[i] / bsize; } solve(); for(int i = 1; i <= q; i++) printf("%d\n", ans[i]); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

poklon.cpp: In function 'int main()':
poklon.cpp:67:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |  scanf("%d %d", &n, &q);
      |  ~~~~~^~~~~~~~~~~~~~~~~
poklon.cpp:68:35: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |  for(int i = 1; i <= n; i++) scanf("%d", a + i);
      |                              ~~~~~^~~~~~~~~~~~~
poklon.cpp:71:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |   scanf("%d %d", L + i, R + i);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...