This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define vi vector<int>
#define vvi vector<vector<int>>
#define pii pair<int, int>
#define vpii vector<pair<int, int>>
#define vc vector<char>
#define vb vector<bool>
#define mii map<int,int>
#define f0r(i,n) for(int i=0;i<n;i++)
#define FOR(i,k,n) for(int i=k;i<n;i++)
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define in(a) int a; cin>>a
#define in2(a,b) int a,b; cin>>a>>b
#define in3(a,b,c) int a,b,c; cin>>a>>b>>c
#define in4(a,b,c,d) int a,b,c,d; cin>>a>>b>>c>>d
#define vin(v,n); vi v(n); f0r(i,n){cin>>v[i];}
#define out(a) cout<<a<<'\n'
#define out2(a,b) cout<<a<<' '<<b<<'\n'
#define out3(a,b,c) cout<<a<<' '<<b<<' '<<c<<'\n'
#define out4(a,b,c,d) cout<<a<<' '<<b<<' '<<c<<' '<<d<<'\n'
#define vout(v) for(auto u : v){cout<<u<<' ';} cout<<'\n'
#define dout(a) cout<<a<<' '<<#a<<'\n'
#define dout2(a,b) cout<<a<<' '<<#a<<' '<<b<<' '<<#b<<'\n'
#define yn(x); if(x){cout<<"YES"<<'\n';}else{cout<<"NO"<<'\n';}
const int leg = 1e9 + 7;
const int mod = 998244353;
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
//ifstream cin(".in");
//ofstream cout(".out");
in2(n,m);
vpii v;
f0r(i,n){
in2(a,b);
v.pb({a,b});
}
vpii normals;
vpii overnights;
f0r(i,n){
if(v[i].first > v[i].second){
overnights.pb(v[i]);
}
else normals.pb(v[i]);
}
vi stimes;
f0r(i, normals.size()){
stimes.pb(normals[i].first);
}
sort(stimes.begin(), stimes.end());
mii ends;
mii nxt;
f0r(i, normals.size()){
auto it = upper_bound(all(stimes), normals[i].second) - 1;
int nx = *it;
nxt[normals[i].first] = max(nxt[normals[i].first], nx);
}
f0r(i, normals.size()){
ends[normals[i].first] = max(ends[normals[i].first], normals[i].second);
}
f0r(i, normals.size()){
//dout2(normals[i].first, nxt[normals[i].first]);
//out2(normals[i].first, ends[normals[i].first]);
}
vector<mii>jmp(18);
f0r(i, normals.size()){
jmp[0][normals[i].first] = nxt[normals[i].first];
}
FOR(i, 1, 18){
f0r(j, normals.size()){
jmp[i][normals[j].first] = jmp[i-1][jmp[i-1][normals[j].first]];
}
}
//take each overnight as a start, if there are none return -1
int ans = 4e18;
f0r(i, overnights.size()){
int l = overnights[i].second;
int r = overnights[i].first;
auto it = upper_bound(all(stimes), l) - 1;
int nx = *it;
int curans = 1;
//dout(nx);
if(nx >= l){
int mn = 0;
int cur = nx;
if(ends[cur] >= r){
curans++;
ans = min(ans, curans);
}
else{
for(int i = 17; i>=0; i--){
if(cur < r && ends[jmp[i][cur]] < r){
cur = jmp[i][cur];
mn += (1<<i);
}
}
//dout2(cur, mn);
curans += mn+2;
if(ends[nxt[cur]] >= r)ans = min(ans, curans);
}
}
}
if(ans == 4e18)out(-1);
else out(ans);
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
51 | f0r(i, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:51:2: note: in expansion of macro 'f0r'
51 | f0r(i, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
57 | f0r(i, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:57:2: note: in expansion of macro 'f0r'
57 | f0r(i, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
63 | f0r(i, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:63:2: note: in expansion of macro 'f0r'
63 | f0r(i, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
66 | f0r(i, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:66:2: note: in expansion of macro 'f0r'
66 | f0r(i, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
71 | f0r(i, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:71:2: note: in expansion of macro 'f0r'
71 | f0r(i, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
75 | f0r(j, normals.size()){
| ~~~~~~~~~~~~~~~~~
Main.cpp:75:3: note: in expansion of macro 'f0r'
75 | f0r(j, normals.size()){
| ^~~
Main.cpp:11:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
11 | #define f0r(i,n) for(int i=0;i<n;i++)
......
81 | f0r(i, overnights.size()){
| ~~~~~~~~~~~~~~~~~~~~
Main.cpp:81:2: note: in expansion of macro 'f0r'
81 | f0r(i, overnights.size()){
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |