Submission #739633

#TimeUsernameProblemLanguageResultExecution timeMemory
739633danikoynovAbracadabra (CEOI22_abracadabra)C++14
10 / 100
3060 ms24328 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 2e5 + 10, maxq = 1e6 + 10; int n, q, a[maxn], ans[maxq], b[maxn]; vector < pair < int, int > > ask[maxn]; void shuffle_array() { deque < int > d1, d2; for (int i = 1; i <= n / 2; i ++) d1.push_back(b[i]); for (int i = n / 2 + 1; i <= n; i ++) d2.push_back(b[i]); deque < int > res; while(!d1.empty() && !d2.empty()) { if (d1.front() < d2.front()) { res.push_back(d1.front()); d1.pop_front(); } else { res.push_back(d2.front()); d2.pop_front(); } } while(!d1.empty()) { res.push_back(d1.front()); d1.pop_front(); } while(!d2.empty()) { res.push_back(d2.front()); d2.pop_front(); } for (int i = 1; i <= n; i ++) b[i] = res[i - 1]; } void smart_shuffle() { vector < pair < int, int > > seg; int i = 1; while(i <= n) { int j = i; while(j <= n && a[i] >= a[j]) j ++; seg.push_back({i, j - 1}); i = j; } pair < int, int > ps; for (int i = 0; i < seg.size(); i ++) { pair < int, int > cur = seg[i]; if (cur.second == n / 2) return; if (cur.first <= n / 2 && cur.second > n / 2) { ps.first = n / 2 + 1; ps.second = cur.second; seg[i].second = n / 2; } } pair < int, int > sv = ps; int d = ps.first; while(d <= sv.second) { int dv = d; while(a[d] >= a[dv]) dv ++; ps.first = d; ps.second = dv - 1; d = dv; for (int i = 0; i < seg.size(); i ++) { if (a[seg[i].first] > a[ps.first]) { seg.insert(seg.begin() + i, ps); break; } } } vector < int > val; for (pair < int, int > cur : seg) { ///cout << "here " << cur.first << " " << cur.second << endl; for (int i = cur.first; i <= cur.second; i ++) val.push_back(a[i]); } for (int i = 1; i <= n; i ++) a[i] = val[i - 1]; } void solve() { cin >> n >> q; for (int i = 1; i <= n; i ++) { cin >> a[i]; b[i] = a[i]; } for (int i = 1; i <= q; i ++) { int t, v; cin >> t >> v; t = min(t, n); if (t == 0) ans[i] = a[v]; else ask[t].push_back({v, i}); } shuffle_array(); for (int i = 1; i <= n; i ++) a[i] = b[i]; for (int f = 1; f <= n; f ++) { for (pair < int, int > cur : ask[f]) { ans[cur.second] = a[cur.first]; } /**for (int i = 1; i <= n; i ++) cout << a[i] << " "; cout << endl;*/ ///shuffle_array(); smart_shuffle(); /**cout << "------------------" << endl; cout << "step " << f << endl; for (int i = 1; i <= n; i ++) if (a[i] != b[i]) cout << "fuck " << i << " " << a[i] << " " << b[i] << endl;*/ } for (int i = 1; i <= q; i ++) cout << ans[i] << endl; } int main() { ///freopen("test.txt", "r", stdin); ///freopen("output.txt", "w", stdout); solve(); return 0; } /** 10 0 3 8 2 4 9 5 10 1 6 7 */

Compilation message (stderr)

Main.cpp: In function 'void smart_shuffle()':
Main.cpp:80:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |     for (int i = 0; i < seg.size(); i ++)
      |                     ~~^~~~~~~~~~~~
Main.cpp:103:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |          for (int i = 0; i < seg.size(); i ++)
      |                          ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...