제출 #1176285

#제출 시각아이디문제언어결과실행 시간메모리
11762858pete8Event Hopping (BOI22_events)C++20
20 / 100
241 ms106596 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-lopps") #define sz(x) (int)((x).size()) #define int long long using namespace std; const int mod=1e9+7,mxn=4e5,inf=1e18,minf=-1e18,lg=30,Mxn=1e6; //#undef int int n,k,m,d,q,T; void setIO(string name){ ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } int go[mxn+10][lg+1],back[mxn+10][lg+1]; struct seg{ int v[2*mxn+10]; void init(){for(int i=0;i<=4*n;i++)v[i]=inf;} void update(int pos,int val){ pos+=2*n; v[pos]=min(v[pos],val); for(int i=pos;i>0;i>>=1)v[i>>1]=min(v[i],v[i^1]); } int qry(int l,int r){ int ans=inf; for(l+=2*n,r+=2*n;l<=r;l>>=1,r>>=1){ if(l&1)ans=min(ans,v[l++]); if(!(r&1))ans=min(ans,v[r--]); } return ans; } }t; int B[mxn+10]; int32_t main(){ fastio cin>>n>>q; vector<int>comp; vector<pii>event(n); for(auto &i:event){ cin>>i.f>>i.s; comp.pb(i.f); comp.pb(i.s); } sort(all(comp)); comp.erase(unique(all(comp)),comp.end()); for(auto &i:event){ i.f=lb(all(comp),i.f)-comp.begin(); i.s=lb(all(comp),i.s)-comp.begin(); } t.init(); for(int i=0;i<comp.size();i++)back[i][0]=B[i]=inf; for(auto i:event){ go[i.f][0]=max(go[i.f][0],i.s); t.update(i.s,i.f); B[i.s]=min(B[i.s],i.f); } for(int i=1;i<comp.size();i++)go[i][0]=max(go[i][0],go[i-1][0]); for(auto i:event)back[i.f][0]=min(back[i.f][0],t.qry(i.f,i.s)); for(int j=1;j<=lg;j++)for(int i=0;i<comp.size();i++){ go[i][j]=go[go[i][j-1]][j-1]; back[i][j]=((back[i][j-1]==inf)?inf:back[back[i][j-1]][j-1]); } while(q--){ int a,b;cin>>a>>b; a--,b--; if(a==b){ cout<<0<<'\n'; continue; } if(event[b].f<=event[a].s&&event[a].s<=event[b].s){ cout<<1<<'\n'; continue; } if(event[a].f>event[b].s)cout<<"impossible\n"; else{ int cur=event[a].s,ans=0,cur2=event[b].f; for(int i=lg;i>=0;i--){ if(go[cur][i]>cur&&go[cur][i]<cur2)cur=go[cur][i],ans+=(1LL<<i); } for(int i=lg;i>=0;i--){ if(back[cur2][i]<cur2&&back[cur2][i]>cur)cur2=back[cur2][i],ans+=(1LL<<i); } if(back[cur2][0]>=B[cur]&&back[cur2][0]<=cur)cout<<ans+2<<'\n'; else cout<<"impossible\n"; } } }

컴파일 시 표준 에러 (stderr) 메시지

events.cpp:16:40: warning: bad option '-funroll-lopps' to pragma 'optimize' [-Wpragmas]
   16 | #pragma GCC optimize ("03,unroll-lopps")
      |                                        ^
events.cpp:23:23: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   23 | void setIO(string name){
      |                       ^
events.cpp:31:19: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   31 |         void init(){for(int i=0;i<=4*n;i++)v[i]=inf;}
      |                   ^
events.cpp:32:36: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   32 |         void update(int pos,int val){
      |                                    ^
events.cpp:37:28: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   37 |         int qry(int l,int r){
      |                            ^
events.cpp:47:14: warning: bad option '-funroll-lopps' to attribute 'optimize' [-Wattributes]
   47 | int32_t main(){
      |              ^
events.cpp: In function 'void setIO(std::string)':
events.cpp:25:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |         freopen((name+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
events.cpp:26:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         freopen((name+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...