Submission #534869

#TimeUsernameProblemLanguageResultExecution timeMemory
534869PixelCatRailway Trip 2 (JOI22_ho_t4)C++14
100 / 100
1255 ms325252 KiB
/* code by the cute PixelCat owo */ /* as cute as nacho neko (aka. my wife)! */ // #pragma GCC // optimize("O4,unroll-loops,no-stack-protector") #include <bits/stdc++.h> #define int LL //__int128 #define double long double using namespace std; using LL = long long; using uLL = unsigned long long; using pii = pair<int, int>; #define For(i, a, b) for (int i = a; i <= b; i++) #define Fors(i, a, b, s) for (int i = a; i <= b; i += s) #define Forr(i, a, b) for (int i = a; i >= b; i--) #define F first #define S second #define L(id) (id * 2 + 1) #define R(id) (id * 2 + 2) #define LO(x) (x & (-x)) #define eb emplace_back #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define mkp make_pair // #define MOD (int)(998244353) #define MOD (int)((LL)1e9 + 7) #define INF (int)(9000000000000000000ll) // 9e18 #define EPS (1e-6) #ifdef NYAOWO #include "library/debug.hpp" inline void USACO(const string &s) { cerr << "USACO: " << s << "\n"; } #else #define debug(...) inline void timer() {} inline void USACO(const string &s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } #endif inline void NYA() { ios::sync_with_stdio(false); cin.tie(0); } inline int gcd(int a, int b) { return __gcd(a, b); } inline int lcm(int a, int b) { return a / gcd(a, b) * b; } int fpow(int b, int p, const int &mod) { int ans = 1; while (p) { if (p & 1) ans = ans * b % mod; p /= 2; b = b * b % mod; } return ans; } int fpow(int b, int p) { return fpow(b, p, MOD); } template <typename T> inline void chmin(T &_a, const T &_b) { if (_b < _a) _a = _b; } template <typename T> inline void chmax(T &_a, const T &_b) { if (_b > _a) _a = _b; } // mt19937_64 rng( // chrono::steady_clock::now().time_since_epoch().count()); int n; struct Sparse{ int32_t a[100010][20]; void set(int i,int x){ a[i][0]=x; } void build(bool f){ For(j,0,18) For(i,1,n){ int i2=i+(1<<j); if(i2>n) a[i][j+1]=a[i][j]; else if(f) a[i][j+1]=max(a[i][j],a[i2][j]); else a[i][j+1]=min(a[i][j],a[i2][j]); } } int rmxq(int l,int r){ int k=__lg(r-l+1); return max(a[l][k],a[r-(1<<k)+1][k]); } int rmnq(int l,int r){ int k=__lg(r-l+1); return min(a[l][k],a[r-(1<<k)+1][k]); } }lsp[20],rsp[20]; // take n trains from s bool step(int s,int t,int ns){ int l=s; int r=s; For(j,0,19) if(ns&(1<<j)){ int tl=lsp[j].rmnq(l,r); int tr=rsp[j].rmxq(l,r); if(tl>l) debug(s,t,ns); l=tl; r=tr; } return l<=t && t<=r; } int32_t main() { NYA(); // nyaacho >/////< // miku sama bless me >/////< cin>>n; int k; cin>>k; int m; cin>>m; { vector<pii> vr,vl; For(i,1,m){ int l,r; cin>>l>>r; if(l<r) vr.eb(l,r); else vl.eb(r,l); } m=sz(vr); sort(all(vr)); multiset<int> st; int itl=0,itr=-1; For(r,1,n){ while(itr<m-1 && vr[itr+1].F==r){ itr++; st.insert(vr[itr].S); } while(itl<=m-1 && vr[itl].F<=r-k){ st.erase(st.find(vr[itl].S)); itl++; } int res=r; if(sz(st)) res=max(res,*st.rbegin()); rsp[0].set(r,res); } m=sz(vl); sort(all(vl),[](const pii &a,const pii &b){ return a.S<b.S; }); st.clear(); itl=m-1; itr=m; Forr(l,n,1){ while(itr>0 && vl[itr-1].S==l){ itr--; st.insert(vl[itr].F); } while(itl>=0 && vl[itl].S>=l+k){ st.erase(st.find(vl[itl].F)); itl--; } int res=l; if(sz(st)) res=min(res,*st.begin()); lsp[0].set(l,res); } } lsp[0].build(false); rsp[0].build(true); For(j,1,19){ For(i,1,n){ int l=lsp[j-1].a[i][0]; int r=rsp[j-1].a[i][0]; lsp[j].set(i,lsp[j-1].rmnq(l,r)); rsp[j].set(i,rsp[j-1].rmxq(l,r)); } lsp[j].build(false); rsp[j].build(true); } int q; cin>>q; while(q--){ int s,t; cin>>s>>t; int lo=-1,hi=(1<<20)-1; while(hi-lo>1){ int mi=(hi+lo)/2; if(step(s,t,mi)) hi=mi; else lo=mi; } if(hi+1==(1<<20)){ cout<<"-1\n"; }else{ cout<<hi<<"\n"; } } return 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...