Submission #1225217

#TimeUsernameProblemLanguageResultExecution timeMemory
1225217TadijaSebezRailway Trip 2 (JOI22_ho_t4)C++20
100 / 100
1183 ms79452 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back const int inf=1e9+7; const int N=100050; const int L=18; int mnl[N][L],mxr[N][L]; vector<int> ql[N],qr[N]; const int M=2*N*(L+1); int root[L],ls[M],rs[M],tsz; pair<int,int> val[M]; pair<int,int> operator + (pair<int,int> a,pair<int,int> b){ return {min(a.first,b.first),max(a.second,b.second)}; } void Build(int&c,int ss,int se,int lvl){ c=++tsz; if(ss==se){ val[c]={mnl[ss][lvl],mxr[ss][lvl]}; return; } int mid=ss+se>>1; Build(ls[c],ss,mid,lvl); Build(rs[c],mid+1,se,lvl); val[c]=val[ls[c]]+val[rs[c]]; } pair<int,int> Get(int c,int ss,int se,int qs,int qe){ if(qs>qe||qs>se||ss>qe)return {inf,-inf}; if(qs<=ss&&qe>=se)return val[c]; int mid=ss+se>>1; return Get(ls[c],ss,mid,qs,qe)+Get(rs[c],mid+1,se,qs,qe); } int main(){ int n,k,m; scanf("%i %i %i",&n,&k,&m); for(int i=1;i<=n;i++){ mnl[i][0]=i; mxr[i][0]=i; } for(int i=1;i<=m;i++){ int a,b; scanf("%i %i",&a,&b); if(a<b)mxr[a][0]=max(mxr[a][0],b); else mnl[a][0]=min(mnl[a][0],b); } Build(root[0],1,n,0); for(int i=1;i<=n;i++){ mnl[i][0]=Get(root[0],1,n,i,i+k-1).first; mxr[i][0]=Get(root[0],1,n,i-k+1,i).second; } Build(root[0],1,n,0); for(int j=1;j<L;j++){ for(int i=1;i<=n;i++){ tie(mnl[i][j],mxr[i][j])=Get(root[j-1],1,n,mnl[i][j-1],mxr[i][j-1]); } Build(root[j],1,n,j); } int q; scanf("%i",&q); while(q--){ int s,t; scanf("%i %i",&s,&t); if(mnl[s][L-1]>t || mxr[s][L-1]<t){ printf("-1\n"); }else{ int l=s,r=s,ans=0; for(int i=L-1;i>=0;i--){ auto now=Get(root[i],1,n,l,r); if(now.first>t || now.second<t){ ans+=1<<i; tie(l,r)=now; } } printf("%i\n",ans+1); } } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:39:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |     scanf("%i %i %i",&n,&k,&m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~
Main.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |         scanf("%i %i",&a,&b);
      |         ~~~~~^~~~~~~~~~~~~~~
Main.cpp:63:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |     scanf("%i",&q);
      |     ~~~~~^~~~~~~~~
Main.cpp:66:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         scanf("%i %i",&s,&t);
      |         ~~~~~^~~~~~~~~~~~~~~
#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...