Submission #1157100

#TimeUsernameProblemLanguageResultExecution timeMemory
1157100keremOsumnjičeni (COCI21_osumnjiceni)C++20
10 / 110
1095 ms20172 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fr first #define sc second #define pb push_back #define endl "\n" #define all(x) x.begin(),x.end() #define sp << " " << #define inf 1e18+1 #define N 500 #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed<<setprecision(0) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tuple<int,int,int> tiii; typedef pair<int,int> pii; void solve(){ int n; cin >> n; vector<pii> d,h; vector<int> a; set<pii> s; d.assign(n+5,pii()); h.assign(n+5,pii()); a.assign(n+5,0); for(int i=1;i<=n;i++) cin >> h[i].fr >> h[i].sc; int j=1; for(int i=1;i<=n;i++){ auto it=s.upper_bound(h[j]); while(j<=n && (it==s.end() || h[j].sc<it->fr) && (it==s.begin() || (--it)->sc<h[j].fr)){ s.insert(h[j++]); it=s.upper_bound(h[j]); } a[i]=j; s.erase(h[i]); } d[n+1].fr=n+1; d[n+1].sc=0; for(int i=n;i>=1;i--){ if(a[i]/N==i/N){ d[i].fr=d[a[i]].fr; d[i].sc=d[a[i]].sc+1; } else{ d[i].fr=a[i]; d[i].sc=1; } } int q; cin >> q; while(q--){ int l,r; cin >> l >> r; int ans=0; while(l/N!=r/N){ ans+=d[l].sc; l=d[l].fr; } while(l<=r){ ans++; l=a[l]; } cout << ans << endl; } } int32_t main(){ fast; int test=1; //~ cin >> test; while(test--) solve(); }
#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...