제출 #1302480

#제출 시각아이디문제언어결과실행 시간메모리
1302480Jawad_Akbar_JJAbracadabra (CEOI22_abracadabra)C++20
10 / 100
2051 ms589824 KiB
#include <iostream> #include <vector> using namespace std; const int N = 1<<18; int ft[N], a[N], Ans[N<<2]; vector<int> vec[N]; vector<pair<int, int>> Qr[N]; void Add(int i, int v){ for (; i < N; i += i&-i) ft[i] += v; } int get(int i, int ans = 0){ for (; i; i -= i&-i) ans += ft[i]; return ans; } int get2(int k, int i = 1){ while (1){ if (ft[i + (i&-i)] < k) i += i&-i; else if (ft[i] >= k) return i-1; else k -= ft[i++]; } return -1; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n, q; cin>>n>>q; for (int i=1;i<=n;i++) cin>>a[i]; for (int i=1, t, id;i<=q;i++){ cin>>t>>id; t = min(t, n); if (t == 0) Ans[i] = a[id]; else Qr[t].push_back({id, i}); } int l1 = 1, l2 = n / 2 + 1, m = 0, b; while (l1 <= n / 2 or l2 <= n){ if (l1 <= n / 2 and (l2 == n + 1 or a[l2] > a[l1])) b = a[l1++]; else b = a[l2++]; m = max(m, b); vec[m].push_back(b); Add(m, 1); } for (int i=1;i<=n;i++){ for (auto [id, id2] : Qr[i]){ int k = get2(id) + 1, rem = id - get(k - 1); Ans[id2] = vec[k][rem - 1]; } int k = get2(n / 2) + 1, rem = get(k) - n / 2; // if (get(k) < n / 2 or vec[k].size() < rem) // cout<<1 / 0; m = 0; Add(k, -rem); int sz = vec[k].size(), cnt = 0; for (int j=sz - rem;j < sz;j++){ m = max(m, vec[k][j]), vec[m].push_back(vec[k][j]), Add(m, 1); cnt++; if (cnt > rem) cout<<1 / 0; } while (rem--) vec[k].pop_back(); } for (int i=1;i<=q;i++) cout<<Ans[i]<<'\n'; }

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

Main.cpp: In function 'int main()':
Main.cpp:80:41: warning: division by zero [-Wdiv-by-zero]
   80 |                                 cout<<1 / 0;
      |                                       ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...