답안 #888954

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
888954 2023-12-18T13:11:43 Z thunopro Passport (JOI23_passport) C++14
48 / 100
195 ms 89932 KB
#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] ;

int d [maxn] ; 
int dp [maxn][2] ; 

vi T [maxn*4] ; 
int pos_segment [maxn] ; 
void build ( int id , int l , int r ) 
{
	if ( l == r ) 
	{
		pos_segment [l] = id ; 
		return ; 
	}
	int mid = (l+r)/2 ; 
	build (left,l,mid) ; 
	build (right,mid+1,r) ; 
}

void add_edge ( int id , int l , int r , int u , int v , int E ) 
{
	if ( l > v || r < u ) return ; 
	if ( u <= l && r <= v ) 
	{
		T [id] . pb (E) ; 
		return ; 
	}
	int mid = (l+r)/2 ; 
	add_edge (left,l,mid,u,v,E) ; 
	add_edge (right,mid+1,r,u,v,E) ; 
}

bool used [maxn] ; 

struct shape {
	int u , d ; 
	bool operator < ( const shape &o ) const 
	{
		return d > o.d ; 
	}
};
void bfs () 
{
	memset ( used , false , sizeof used ) ;
	priority_queue <shape> q ; 
	for ( int i = 1 ; i <= n ; i ++ ) if ( d [i] < INF ) q . push ({i,d[i]}) ; 
	
	while (!q.empty()) 
	{
		shape t = q.top() ; q.pop() ; 
		int u = t.u ; 
		if ( d[u] != t.d ) continue ; 
		int id = pos_segment [u] ; 
		while ( id ) 
		{
			if ( used [id] ) break ; 
			used [id] = true ; 
			for ( auto v : T [id] ) 
			{
				if ( d [v] > d [u] + 1 ) q . push ({v,d[v]=d[u]+1}) ; 
			}
			id /= 2 ; 
		}
	}
	
}
void sub_AC () 
{
	build (1,1,n) ; 
	
	memset ( d , 0x3f , sizeof d ) ; d [1] = 0 ; 
	bfs () ; 
	for ( int i = 1 ; i <= n ; i ++ ) dp [i][0] = d [i] ;
	
	memset ( d , 0x3f , sizeof d ) ; d [n] = 0 ; 
	bfs () ; 
	for ( int i = 1 ; i <= n ; i ++ ) dp [i][1] = d [i] ; 
	
	dp [1][0] = 1 , dp [n][1] = 1 ; 
	for ( int i = 1 ; i <= n ; i ++ ) d [i] = min (INF,dp[i][0]+dp[i][1]) ; 
	bfs () ;  
	
	for ( int i = 1 ; i <= n ; i ++ ) 
	{
		if ( is_query [i] ) 
		{
			if ( d [i] == INF ) cout << - 1 << "\n" ; 
			else cout << d [i]-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 ++ ) 
	{
		int l , r ; cin >> l >> r ; 
		add_edge (1,1,n,l,r,i) ; 
	}
	
	int nq ; cin >> nq ; 
	for ( int i = 1 ; i <= nq ; i ++ ) 
	{
		int x ; cin >> x ; 
		is_query [x] = true ; 
	}
	
	sub_AC () ; 
}

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) ;
      |  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 23128 KB Output is correct
2 Correct 5 ms 23132 KB Output is correct
3 Correct 5 ms 23132 KB Output is correct
4 Runtime error 195 ms 89932 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 23132 KB Output is correct
2 Correct 4 ms 23212 KB Output is correct
3 Correct 5 ms 23132 KB Output is correct
4 Correct 4 ms 23132 KB Output is correct
5 Correct 5 ms 23132 KB Output is correct
6 Correct 4 ms 22968 KB Output is correct
7 Correct 5 ms 23132 KB Output is correct
8 Correct 5 ms 23128 KB Output is correct
9 Correct 4 ms 23128 KB Output is correct
10 Correct 5 ms 23132 KB Output is correct
11 Correct 5 ms 23132 KB Output is correct
12 Correct 5 ms 23132 KB Output is correct
13 Correct 5 ms 23132 KB Output is correct
14 Correct 5 ms 23132 KB Output is correct
15 Correct 5 ms 23056 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 23132 KB Output is correct
2 Correct 4 ms 23212 KB Output is correct
3 Correct 5 ms 23132 KB Output is correct
4 Correct 4 ms 23132 KB Output is correct
5 Correct 5 ms 23132 KB Output is correct
6 Correct 4 ms 22968 KB Output is correct
7 Correct 5 ms 23132 KB Output is correct
8 Correct 5 ms 23128 KB Output is correct
9 Correct 4 ms 23128 KB Output is correct
10 Correct 5 ms 23132 KB Output is correct
11 Correct 5 ms 23132 KB Output is correct
12 Correct 5 ms 23132 KB Output is correct
13 Correct 5 ms 23132 KB Output is correct
14 Correct 5 ms 23132 KB Output is correct
15 Correct 5 ms 23056 KB Output is correct
16 Correct 6 ms 23196 KB Output is correct
17 Correct 7 ms 23384 KB Output is correct
18 Correct 6 ms 23384 KB Output is correct
19 Correct 6 ms 23388 KB Output is correct
20 Correct 7 ms 23236 KB Output is correct
21 Correct 6 ms 23128 KB Output is correct
22 Correct 7 ms 23132 KB Output is correct
23 Correct 6 ms 23388 KB Output is correct
24 Correct 7 ms 23132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 23132 KB Output is correct
2 Correct 4 ms 23212 KB Output is correct
3 Correct 5 ms 23132 KB Output is correct
4 Correct 4 ms 23132 KB Output is correct
5 Correct 5 ms 23132 KB Output is correct
6 Correct 4 ms 22968 KB Output is correct
7 Correct 5 ms 23132 KB Output is correct
8 Correct 5 ms 23128 KB Output is correct
9 Correct 4 ms 23128 KB Output is correct
10 Correct 5 ms 23132 KB Output is correct
11 Correct 5 ms 23132 KB Output is correct
12 Correct 5 ms 23132 KB Output is correct
13 Correct 5 ms 23132 KB Output is correct
14 Correct 5 ms 23132 KB Output is correct
15 Correct 5 ms 23056 KB Output is correct
16 Correct 6 ms 23196 KB Output is correct
17 Correct 7 ms 23384 KB Output is correct
18 Correct 6 ms 23384 KB Output is correct
19 Correct 6 ms 23388 KB Output is correct
20 Correct 7 ms 23236 KB Output is correct
21 Correct 6 ms 23128 KB Output is correct
22 Correct 7 ms 23132 KB Output is correct
23 Correct 6 ms 23388 KB Output is correct
24 Correct 7 ms 23132 KB Output is correct
25 Correct 4 ms 23132 KB Output is correct
26 Correct 5 ms 23132 KB Output is correct
27 Correct 7 ms 23388 KB Output is correct
28 Correct 6 ms 23332 KB Output is correct
29 Correct 7 ms 23388 KB Output is correct
30 Correct 6 ms 23380 KB Output is correct
31 Correct 6 ms 23388 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 23128 KB Output is correct
2 Correct 5 ms 23132 KB Output is correct
3 Correct 5 ms 23132 KB Output is correct
4 Runtime error 195 ms 89932 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -