#include<bits/stdc++.h>
using namespace std ;
#define maxn 200009
#define ll long long
#define fi first
#define se second
#define pb push_back
#define left id<<1
#define right id<<1|1
#define re exit(0);
const int mod = 1e9+7 ;
const int INF = 1e9 ;
const int LOG = 18 ;
typedef vector<int> vi ;
typedef vector<ll> vl ;
typedef pair<int,int> pii ;
typedef vector<pii> vii ;
typedef pair<ll,ll> pll ;
void add ( int &a , int b )
{
a += b ;
if ( a < 0 ) a += mod ;
if ( a >= mod ) a -= mod ;
}
template < typename T > void chkmin (T &a , T b) { if (a>b) a=b ;}
template < typename T > void chkmax (T &a , T b) { if (a<b) a=b ;}
void rf ()
{
freopen ("bai1.inp","r",stdin) ;
// freopen ("bai1.out","w",stdout) ;
}
int n ;
pii a [maxn] ;
bool is_query [maxn] ;
void sub1 ()
{
priority_queue <int> S ;
for ( int i = 1 ; i <= a [1].se ; i ++ ) S.push(a[i].se) ;
int res = 1 ;
int cur = a[1].se ;
while ( !S.empty () )
{
int u = S.top() ; S.pop() ;
if ( cur >= u ) break ;
while ( cur < u ) S . push (a[++cur].se) ;
res ++ ;
}
if ( cur >= n ) cout << res ;
else cout << -1 ;
}
int dp [3009][3009] ;
void sub2 ()
{
int pos ;
for ( int i = 1 ; i <= n ; i ++ ) if ( is_query [i] ) pos = i ;
memset ( dp , 0x3f , sizeof dp ) ;
dp [pos][pos] = 0 ;
for ( int len = 0 ; len <= n-1 ; len ++ )
{
for ( int l = 1 ; l <= n ; l ++ )
{
int r = l + len ;
if ( r > n ) break ;
if ( dp [l][r] > 1e9 ) continue ;
for ( int i = l ; i <= r ; i ++ )
{
chkmin (dp[min(l,a[i].fi)][max(r,a[i].se)],dp[l][r]+1) ;
}
}
}
if ( dp [1][n] > 1e9 ) dp [1][n] = - 1 ;
cout << dp [1][n] ;
}
int range [3009][3009][2] ;
void sub3 ()
{
int pos ;
for ( int i = 1 ; i <= n ; i ++ ) if ( is_query [i] ) pos = i ;
memset ( dp , 0x3f , sizeof dp ) ;
dp [pos][pos] = 0 ;
deque <pii> q ;
q . push_back ({pos,pos}) ;
for ( int i = 1 ; i <= n ; i ++ ) for ( int j = i ; j <= n ; j ++ )
{
if ( i == j ) range [i][j][0] = INF , range [i][j][1] = - INF ;
if ( j > i ) range [i][j][0] = range [i][j-1][0] ;
chkmin (range[i][j][0],a[j].fi) ;
if ( j > i ) range [i][j][1] = range [i][j-1][1] ;
chkmax (range[i][j][1],a[j].se) ;
}
while ( !q.empty() )
{
int l = q.front().fi , r = q.front().se ;
q.pop_front() ;
// state 1 : chosse left
int L = range [l][r][0] , R = r ;
if ( dp [L][R] > dp [l][r] + 1 ) q . push_back ({L,R}) , dp [L][R] = dp [l][r] + 1 ;
// state 2 : chosse right
L = l , R = range [l][r][1] ;
if ( dp [L][R] > dp [l][r] + 1 ) q . push_back ({L,R}) , dp [L][R] = dp [l][r] + 1 ;
// state 3 : in mid
if ( l == r )
{
L = a [l].fi , R = a[l].se ;
if ( dp [L][R] > dp [l][r] + 1 ) q . push_back ({L,R}) , dp [L][R] = dp [l][r] + 1 ;
}
else
{
L = l + 1 , R = r ;
if ( dp [L][R] > dp [l][r] ) q . push_front ({L,R}) , dp [L][R] = dp [l][r] ;
L = l , R = r - 1 ;
if ( dp [L][R] > dp [l][r] ) q . push_front ({L,R}) , dp [L][R] = dp [l][r] ;
}
}
if ( dp [1][n] > INF ) dp [1][n] = - 1 ;
cout << dp [1][n] ;
}
int main ()
{
ios_base::sync_with_stdio(0) ;
cin.tie(0) ; cout.tie(0) ;
// rf () ;
cin >> n ;
for ( int i = 1 ; i <= n ; i ++ ) cin >> a [i].fi >> a[i].se ;
int nq ; cin >> nq ;
for ( int i = 1 ; i <= nq ; i ++ )
{
int x ; cin >> x ;
is_query [x] = true ;
}
if ( nq == 1 && is_query [1] == true ) sub1 () ;
else if ( nq == 1 && n <= 300 ) sub2 () ;
else if ( nq == 1 && n <= 2500 ) sub3 () ;
else if ( n <= 2500 ) sub3 () ;
}
Compilation message
passport.cpp: In function 'void rf()':
passport.cpp:34:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
34 | freopen ("bai1.inp","r",stdin) ;
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
passport.cpp: In function 'void sub2()':
passport.cpp:67:16: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
67 | dp [pos][pos] = 0 ;
| ~~~~~~~~~~~~~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Correct |
33 ms |
4824 KB |
Output is correct |
5 |
Correct |
36 ms |
4836 KB |
Output is correct |
6 |
Correct |
24 ms |
3664 KB |
Output is correct |
7 |
Correct |
20 ms |
4828 KB |
Output is correct |
8 |
Correct |
17 ms |
3808 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2396 KB |
Output is correct |
2 |
Correct |
4 ms |
37212 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
0 ms |
2396 KB |
Output is correct |
5 |
Correct |
6 ms |
37212 KB |
Output is correct |
6 |
Correct |
5 ms |
37212 KB |
Output is correct |
7 |
Correct |
5 ms |
37208 KB |
Output is correct |
8 |
Correct |
5 ms |
37464 KB |
Output is correct |
9 |
Correct |
5 ms |
37208 KB |
Output is correct |
10 |
Correct |
5 ms |
37212 KB |
Output is correct |
11 |
Correct |
6 ms |
37212 KB |
Output is correct |
12 |
Correct |
6 ms |
37208 KB |
Output is correct |
13 |
Correct |
5 ms |
37464 KB |
Output is correct |
14 |
Correct |
5 ms |
37212 KB |
Output is correct |
15 |
Correct |
7 ms |
37352 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2396 KB |
Output is correct |
2 |
Correct |
4 ms |
37212 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
0 ms |
2396 KB |
Output is correct |
5 |
Correct |
6 ms |
37212 KB |
Output is correct |
6 |
Correct |
5 ms |
37212 KB |
Output is correct |
7 |
Correct |
5 ms |
37208 KB |
Output is correct |
8 |
Correct |
5 ms |
37464 KB |
Output is correct |
9 |
Correct |
5 ms |
37208 KB |
Output is correct |
10 |
Correct |
5 ms |
37212 KB |
Output is correct |
11 |
Correct |
6 ms |
37212 KB |
Output is correct |
12 |
Correct |
6 ms |
37208 KB |
Output is correct |
13 |
Correct |
5 ms |
37464 KB |
Output is correct |
14 |
Correct |
5 ms |
37212 KB |
Output is correct |
15 |
Correct |
7 ms |
37352 KB |
Output is correct |
16 |
Correct |
104 ms |
93008 KB |
Output is correct |
17 |
Correct |
71 ms |
97120 KB |
Output is correct |
18 |
Correct |
91 ms |
97428 KB |
Output is correct |
19 |
Correct |
94 ms |
95820 KB |
Output is correct |
20 |
Correct |
53 ms |
97064 KB |
Output is correct |
21 |
Correct |
58 ms |
96848 KB |
Output is correct |
22 |
Correct |
40 ms |
97232 KB |
Output is correct |
23 |
Correct |
117 ms |
101716 KB |
Output is correct |
24 |
Correct |
106 ms |
97112 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
2396 KB |
Output is correct |
2 |
Correct |
4 ms |
37212 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
0 ms |
2396 KB |
Output is correct |
5 |
Correct |
6 ms |
37212 KB |
Output is correct |
6 |
Correct |
5 ms |
37212 KB |
Output is correct |
7 |
Correct |
5 ms |
37208 KB |
Output is correct |
8 |
Correct |
5 ms |
37464 KB |
Output is correct |
9 |
Correct |
5 ms |
37208 KB |
Output is correct |
10 |
Correct |
5 ms |
37212 KB |
Output is correct |
11 |
Correct |
6 ms |
37212 KB |
Output is correct |
12 |
Correct |
6 ms |
37208 KB |
Output is correct |
13 |
Correct |
5 ms |
37464 KB |
Output is correct |
14 |
Correct |
5 ms |
37212 KB |
Output is correct |
15 |
Correct |
7 ms |
37352 KB |
Output is correct |
16 |
Correct |
104 ms |
93008 KB |
Output is correct |
17 |
Correct |
71 ms |
97120 KB |
Output is correct |
18 |
Correct |
91 ms |
97428 KB |
Output is correct |
19 |
Correct |
94 ms |
95820 KB |
Output is correct |
20 |
Correct |
53 ms |
97064 KB |
Output is correct |
21 |
Correct |
58 ms |
96848 KB |
Output is correct |
22 |
Correct |
40 ms |
97232 KB |
Output is correct |
23 |
Correct |
117 ms |
101716 KB |
Output is correct |
24 |
Correct |
106 ms |
97112 KB |
Output is correct |
25 |
Incorrect |
5 ms |
37212 KB |
Output isn't correct |
26 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Correct |
33 ms |
4824 KB |
Output is correct |
5 |
Correct |
36 ms |
4836 KB |
Output is correct |
6 |
Correct |
24 ms |
3664 KB |
Output is correct |
7 |
Correct |
20 ms |
4828 KB |
Output is correct |
8 |
Correct |
17 ms |
3808 KB |
Output is correct |
9 |
Correct |
0 ms |
2396 KB |
Output is correct |
10 |
Correct |
4 ms |
37212 KB |
Output is correct |
11 |
Correct |
1 ms |
2396 KB |
Output is correct |
12 |
Correct |
0 ms |
2396 KB |
Output is correct |
13 |
Correct |
6 ms |
37212 KB |
Output is correct |
14 |
Correct |
5 ms |
37212 KB |
Output is correct |
15 |
Correct |
5 ms |
37208 KB |
Output is correct |
16 |
Correct |
5 ms |
37464 KB |
Output is correct |
17 |
Correct |
5 ms |
37208 KB |
Output is correct |
18 |
Correct |
5 ms |
37212 KB |
Output is correct |
19 |
Correct |
6 ms |
37212 KB |
Output is correct |
20 |
Correct |
6 ms |
37208 KB |
Output is correct |
21 |
Correct |
5 ms |
37464 KB |
Output is correct |
22 |
Correct |
5 ms |
37212 KB |
Output is correct |
23 |
Correct |
7 ms |
37352 KB |
Output is correct |
24 |
Correct |
104 ms |
93008 KB |
Output is correct |
25 |
Correct |
71 ms |
97120 KB |
Output is correct |
26 |
Correct |
91 ms |
97428 KB |
Output is correct |
27 |
Correct |
94 ms |
95820 KB |
Output is correct |
28 |
Correct |
53 ms |
97064 KB |
Output is correct |
29 |
Correct |
58 ms |
96848 KB |
Output is correct |
30 |
Correct |
40 ms |
97232 KB |
Output is correct |
31 |
Correct |
117 ms |
101716 KB |
Output is correct |
32 |
Correct |
106 ms |
97112 KB |
Output is correct |
33 |
Incorrect |
5 ms |
37212 KB |
Output isn't correct |
34 |
Halted |
0 ms |
0 KB |
- |