Submission #538754

#TimeUsernameProblemLanguageResultExecution timeMemory
538754JomnoiIndex (COCI21_index)C++17
110 / 110
993 ms10060 KiB
#include <bits/stdc++.h> #define DEBUG 0 using namespace std; const int N = 2e5 + 10; const int BLOCK_SIZE = 450; int p[N]; int fenwick[N]; int ans[N]; class QUERY { public : int l, r, i; QUERY() : l(0), r(0), i(0) {} QUERY(int l_, int r_, int i_) : l(l_), r(r_), i(i_) {} bool operator<(const QUERY &o) const { return make_pair((l + BLOCK_SIZE - 1) / BLOCK_SIZE, r) < make_pair((o.l + BLOCK_SIZE - 1) / BLOCK_SIZE, o.r); } }; class Fenwick { public : void update(int idx, int v) { for(; idx < N; idx += (idx & -idx)) { fenwick[idx] += v; } } int query(int idx) { int res = 0; for(; idx > 0; idx -= (idx & -idx)) { res += fenwick[idx]; } return res; } }fw; int main() { int n, q; scanf(" %d %d", &n, &q); for(int i = 1; i <= n; i++) { scanf(" %d", &p[i]); } vector <QUERY> query; for(int i = 1; i <= q; i++) { int l, r; scanf(" %d %d", &l, &r); query.push_back(QUERY(l, r, i)); } sort(query.begin(), query.end()); int cur_l = 1, cur_r = 0; for(auto [l, r, i] : query) { while(cur_l > l) { fw.update(p[--cur_l], 1); } while(cur_r < r) { fw.update(p[++cur_r], 1); } while(cur_l < l) { fw.update(p[cur_l++], -1); } while(cur_r > r) { fw.update(p[cur_r--], -1); } int le = 1, hi = r - l + 1, pos = 1; while(le <= hi) { int mid = (le + hi) / 2; if(fw.query(n) - fw.query(mid - 1) < mid) { hi = mid - 1; } else { le = mid + 1; pos = mid; } } ans[i] = pos; } for(int i = 1; i <= q; i++) { printf("%d\n", ans[i]); } return 0; }

Compilation message (stderr)

index.cpp: In function 'int main()':
index.cpp:41:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |     scanf(" %d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
index.cpp:43:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |         scanf(" %d", &p[i]);
      |         ~~~~~^~~~~~~~~~~~~~
index.cpp:49:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |         scanf(" %d %d", &l, &r);
      |         ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...