제출 #1028302

#제출 시각아이디문제언어결과실행 시간메모리
1028302snpmrnhlolRailway Trip 2 (JOI22_ho_t4)C++17
100 / 100
404 ms32704 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e5; const int Q = 5e4; const int logN = 20; const int inf = 2e9; vector <int> op[N + 1]; multiset <int> s; int l[N][logN],r[N][logN]; int segl[N*2],segr[N*2]; int q1[Q],q2[Q]; int ql1[Q],qr1[Q]; int ans[Q]; int n,k,m,q; void build(int id){ for(int i = 2*n - 1;i > 0;i--){ if(i >= n){ segl[i] = l[i - n][id]; segr[i] = r[i - n][id]; }else{ segl[i] = min(segl[i*2],segl[i*2 + 1]); segr[i] = max(segr[i*2],segr[i*2 + 1]); } } } pair<int,int> query(int ql, int qr){ pair<int,int> x = {inf,-inf}; qr++; for(ql+=n,qr+=n;ql < qr;ql/=2,qr/=2){ if(ql&1){ x.first = min(x.first,segl[ql]); x.second = max(x.second,segr[ql]); ql++; } if(qr&1){ qr--; x.first = min(x.first,segl[qr]); x.second = max(x.second,segr[qr]); } } return x; } int main(){ cin>>n>>k; cin>>m; for(int i = 0;i < m;i++){ int a,b; cin>>a>>b; a--;b--; if(a < b){ op[a].push_back(b + 1); op[min(a + k,b)].push_back(-(b + 1)); }else{ op[max(a - k + 1,b + 1)].push_back(b + 1); op[a + 1].push_back(-(b + 1)); } } for(int i = 0;i < n;i++){ for(auto j:op[i]){ if(j > 0){ s.insert(j - 1); }else{ s.erase(s.find(-j - 1)); } } s.insert(i); l[i][0] = *s.begin(); r[i][0] = *s.rbegin(); s.erase(s.find(i)); } for(int j = 1;j < logN;j++){ ///nlog^2n im crying and shaking rn build(j - 1); for(int i = 0;i < n;i++){ auto x = query(l[i][j - 1],r[i][j - 1]); l[i][j] = x.first; r[i][j] = x.second; } } ///PBS lesgooooooooo cin>>q; for(int i = 0;i < q;i++){ cin>>q1[i]>>q2[i]; q1[i]--; q2[i]--; ql1[i] = qr1[i] = q1[i]; ans[i] = 1; } for(int j = logN - 1;j >= 0;j--){ build(j); for(int i = 0;i < q;i++){ auto x = query(ql1[i],qr1[i]); if(!(x.first <= q2[i] && q2[i] <= x.second)){ ql1[i] = x.first; qr1[i] = x.second; ans[i]+=(1<<j); } } } for(int i = 0;i < q;i++){ if(ans[i] == (1<<logN))ans[i] = -1; cout<<ans[i]<<'\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...