Submission #703383

#TimeUsernameProblemLanguageResultExecution timeMemory
703383AestivateRailway Trip 2 (JOI22_ho_t4)C++17
27 / 100
2087 ms13644 KiB
#include<bits/stdc++.h> #include<random> using namespace std; template<typename T> void _do(T x){cerr<<x<<"\n";} template<typename T,typename ...U> void _do(T x,U ...y){cerr<<x<<", ";_do(y...);} #define dbg(...) cerr<<#__VA_ARGS__<<" = ";_do(__VA_ARGS__); #define ss(n) fixed<<setprecision(n) #define ll long long #define int ll #define IO ios::sync_with_stdio(false);cin.tie(0); #define ld long double #define pb push_back #define pii pair<int,int> #define rep(i,a) for(int i=1;i<=a;i++) #define rep0(i,a) for(int i=0;i<a;i++) #define F first #define S second #define float double ll gcd(ll a,ll b){if(b==0) return a; return gcd(b,a%b);} const ld pi=3.14159265358979323846264338327950288419716939931; const int lar=3e18; const int mol1=1e9+7; const int mol2=998224353; const int mol3=1e15+9; const int bb=137; int mxl[400005],mxr[400005],lal1[400005]={0},lal2[400005]; void build(int l,int r,int ind){ if(l==r){ mxl[ind]=l;mxr[ind]=l; return; } int mid=l+r>>1; build(l,mid,ind*2);build(mid+1,r,ind*2+1); mxl[ind]=min(mxl[ind*2],mxl[ind*2+1]); mxr[ind]=max(mxr[ind*2],mxr[ind*2+1]); } void upd1(int l,int r ,int l1,int r1,int vv,int ind){ if(l1<=l&&r<=r1) { lal1[ind]=min(lal1[ind],vv); mxl[ind]=min(mxl[ind],vv); return; } int mid=l+r>>1; if(lal1[ind]!=lar){ int p=lal1[ind];lal1[ind]=lar; lal1[ind*2]=min(lal1[ind*2],p); lal1[ind*2+1]=min(lal1[ind*2+1],p);mxl[ind*2]=min(mxl[ind*2],p); mxl[ind*2+1]=min(mxl[ind*2+1],p); } if(r1<=mid) upd1(l,mid,l1,r1,vv,ind*2); else if(l1>mid) upd1(mid+1,r,l1,r1,vv,ind*2+1); else{ upd1(l,mid,l1,r1,vv,ind*2);upd1(mid+1,r,l1,r1,vv,ind*2+1); } mxl[ind]=min(mxl[ind*2],mxl[ind*2+1]); } void upd2(int l,int r ,int l1,int r1,int vv,int ind){ if(l1<=l&&r<=r1) { lal2[ind]=max(lal2[ind],vv); mxr[ind]=max(mxr[ind],vv); return; } int mid=l+r>>1; if(lal2[ind]!=-lar){ int p=lal2[ind];lal2[ind]=-lar; lal2[ind*2]=max(lal2[ind*2],p); lal2[ind*2+1]=max(lal2[ind*2+1],p);mxr[ind*2]=max(mxr[ind*2],p); mxr[ind*2+1]=max(mxr[ind*2+1],p); } if(r1<=mid) upd2(l,mid,l1,r1,vv,ind*2); else if(l1>mid) upd2(mid+1,r,l1,r1,vv,ind*2+1); else{ upd2(l,mid,l1,r1,vv,ind*2);upd2(mid+1,r,l1,r1,vv,ind*2+1); } mxr[ind]=max(mxr[ind*2],mxr[ind*2+1]); } int val1(int l,int r,int l1,int r1,int ind){ if(l1<=l&&r<=r1) return mxl[ind]; int mid=l+r>>1; if(lal1[ind]!=lar){ int p=lal1[ind];lal1[ind]=lar; lal1[ind*2]=min(lal1[ind*2],p); lal1[ind*2+1]=min(lal1[ind*2+1],p);mxl[ind*2]=min(mxl[ind*2],p); mxl[ind*2+1]=min(mxl[ind*2+1],p); } if(r1<=mid) return val1(l,mid,l1,r1,ind*2); else if(l1>mid) return val1(mid+1,r,l1,r1,ind*2+1); else return min(val1(l,mid,l1,r1,ind*2),val1(mid+1,r,l1,r1,ind*2+1)); mxl[ind]=min(mxl[ind*2],mxl[ind*2+1]); } int val2(int l,int r,int l1,int r1,int ind){ if(l1<=l&&r<=r1) return mxr[ind]; int mid=l+r>>1; if(lal2[ind]!=-lar){ int p=lal2[ind];lal2[ind]=-lar; lal2[ind*2]=max(lal2[ind*2],p); lal2[ind*2+1]=max(lal2[ind*2+1],p);mxr[ind*2]=max(mxr[ind*2],p); mxr[ind*2+1]=max(mxr[ind*2+1],p); } if(r1<=mid) return val2(l,mid,l1,r1,ind*2); else if(l1>mid) return val2(mid+1,r,l1,r1,ind*2+1); else return max(val2(l,mid,l1,r1,ind*2),val2(mid+1,r,l1,r1,ind*2+1)); mxr[ind]=max(mxr[ind*2],mxr[ind*2+1]); } void solve() { int n,k; cin>>n>>k; rep(i,4*n){ lal1[i]=lar,lal2[i]=-lar; } build(1,n,1); int m; cin>>m; rep(i,m){ int g,h; cin>>g>>h; if(g<=h){ upd2(1,n,g,min(g+k-1,h),h,1); } else{ upd1(1,n,max(g-k+1,h),g,h,1); } } int q; cin>>q; rep(i,q){ int g,h; cin>>g>>h; int l=g,r=g; int tt=0; while(h<l||h>r){ tt++; int g1=l,g2=r; l=val1(1,n,g1,g2,1); r=val2(1,n,g1,g2,1); if(l==g1&&r==g2) break; } if(h<l||h>r) cout<<-1<<"\n"; else cout<<tt<<"\n"; } } signed main() { IO solve(); return 0; }

Compilation message (stderr)

Main.cpp: In function 'void build(long long int, long long int, long long int)':
Main.cpp:39:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   39 |     int mid=l+r>>1;
      |             ~^~
Main.cpp: In function 'void upd1(long long int, long long int, long long int, long long int, long long int, long long int)':
Main.cpp:51:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   51 |     int mid=l+r>>1;
      |             ~^~
Main.cpp: In function 'void upd2(long long int, long long int, long long int, long long int, long long int, long long int)':
Main.cpp:72:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   72 |     int mid=l+r>>1;
      |             ~^~
Main.cpp: In function 'long long int val1(long long int, long long int, long long int, long long int, long long int)':
Main.cpp:89:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   89 |     int mid=l+r>>1;
      |             ~^~
Main.cpp: In function 'long long int val2(long long int, long long int, long long int, long long int, long long int)':
Main.cpp:104:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  104 |     int mid=l+r>>1;
      |             ~^~
#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...