Submission #654619

#TimeUsernameProblemLanguageResultExecution timeMemory
654619sunwukong123Abracadabra (CEOI22_abracadabra)C++14
25 / 100
263 ms57832 KiB
#include <bits/stdc++.h> using namespace std; #define int ll #define FOR(i,s,e) for(ll i = s; i <= (ll)e; ++i) #define DEC(i,s,e) for(ll i = s; i >= (ll)e; --i) #define IAMSPEED ios_base::sync_with_stdio(false); cin.tie(0); #ifdef LOCAL #define db(x) cerr << #x << "=" << x << "\n" #define db2(x, y) cerr << #x << "=" << x << " , " << #y << "=" << y << "\n" #define db3(a,b,c) cerr<<#a<<"="<<a<<","<<#b<<"="<<b<<","<<#c<<"="<<c<<"\n" #define dbv(v) cerr << #v << ":"; for (auto ite : v) cerr << ite << ' '; cerr <<"\n" #define dbvp(v) cerr << #v << ":"; for (auto ite : v) cerr << "{" << ite.f << ',' << ite.s << "} "; cerr << "\n" #define dba(a,ss,ee) cerr << #a << ":"; FOR(ite,ss,ee) cerr << a[ite] << ' '; cerr << "\n" #else #define db(x) #define db2(x,y) #define db3(a,b,c) #define dbv(v) #define dbvp(v) #define dba(a,ss,ee) #endif mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define ll long long #define pb push_back #define eb emplace_back #define all(x) (x).begin(), (x).end() #define f first #define s second #define g0(x) get<0>(x) #define g1(x) get<1>(x) #define g2(x) get<2>(x) #define g3(x) get<3>(x) #define reach cerr << "LINE: " << __LINE__ << "\n"; typedef pair <ll, ll> pi; typedef tuple<ll,ll,ll> ti3; typedef tuple<ll,ll,ll,ll> ti4; ll rand(ll a, ll b) { return a + rng() % (b-a+1); } const int MOD = 1e9 + 7; const int inf = (int)1e9 + 500; const long long oo = (ll)1e18 + 500; template <typename T> bool chmax(T& a, const T b) { return a<b ? a = b, 1 : 0; } template <typename T> bool chmin(T& a, const T b) { return a>b ? a = b, 1 : 0; } const int MAXN = 200005; int n,q; map<int,int> val; int A[MAXN]; int nxt[MAXN]; int where[MAXN]; int fw[MAXN]; vector<pi> Qs[MAXN]; int out[MAXN]; set<int> s; void update(int x, int nval) { for(;x<MAXN;x+=x&-x)fw[x]+=nval; } int sum(int x) { int r=0; for(;x;x-=x&-x)r+=fw[x]; return r; } int kth(int &k){ int csum = 0; int pos = 0; for (int i = 20; i >= 0; i--){ if (pos + (1 << i) < n && fw[pos + (1 << i)] < k){ pos += (1 << i); k-=fw[pos]; } } return pos + 1; } int32_t main() { IAMSPEED cin >> n >> q; FOR(i,1,n) cin >> A[i]; FOR(qq,1,q) { int t, x; cin >> t >> x; Qs[min(t,n)].pb(pi(x,qq)); } FOR(i,1,n) where[A[i]] = i; stack<int> st; DEC(i,n,1) { while(st.size() && A[i] > st.top())st.pop(); if(st.empty())nxt[i]=n+1; else { nxt[i]=where[st.top()]; } st.push(A[i]); } int it=1; while(it<=n) { update(A[it], nxt[it] - it); it=nxt[it]; } FOR(ti,0,n) { for(auto query:Qs[ti]) { int val=kth(query.f); out[query.s]=A[where[val]+query.f-1]; } int m=n/2+1; int val=kth(m); if(m==1) continue; int len=sum(val) - sum(val-1); int ed=where[val] + len; update(val, -len + m - 1); for(int id=where[val]+m-1;id<ed;id=nxt[id]) { update(A[id], min(nxt[id],ed) - id); } } FOR(i,1,q)cout<<out[i]<<"\n"; }

Compilation message (stderr)

Main.cpp: In function 'long long int kth(long long int&)':
Main.cpp:62:9: warning: unused variable 'csum' [-Wunused-variable]
   62 |     int csum = 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...