답안 #971481

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
971481 2024-04-28T16:11:23 Z LCJLY Passport (JOI23_passport) C++14
16 / 100
24 ms 54104 KB
#include <bits/stdc++.h>
using namespace std;
	
#define int long long 
#define ld long double
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << "  " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << "  " << j << " " << #i << "  " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<long long,long long>pii;
typedef pair<int,pii>pi2;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());

pii arr[2605];
int n;
int memo[2605][2605];

inline pair<pii,pii> combine(pair<pii,pii> a, pair<pii,pii> b){
	pii temp=min(make_pair(a.first.first,-a.first.second),make_pair(b.first.first,-b.first.second));
	temp.second=-temp.second;
	pii temp2=max(make_pair(a.second.second,-a.second.first),make_pair(b.second.second,-b.second.first));
	temp2.second=-temp2.second;
	swap(temp2.first,temp2.second);
	return {temp,temp2};
}
 
struct node{	
	int s,e,m;
	node *l,*r;
	pair<pii,pii>v;
	
	node(int ss, int ee):s(ss),e(ee),m((s+e)>>1){
		v={{0,0},{0,0}};
		if(s!=e){
			l=new node(s,m);
			r=new node(m+1,e);
		}
	}
	
	void upd(int x, pii y){
		if(s==e){
			v={y,y};
			return;
		}
		if(x<=m) l->upd(x,y);
		else r->upd(x,y);
		v=combine(l->v,r->v); 
	}
	
	pair<pii,pii> query(int x, int y){
		if(x<=s&&y>=e){
			return v;
		}
		if(y<=m) return l->query(x,y);
		if(x>m) return r->query(x,y);
		return combine(l->query(x,m),r->query(m+1,y));
	}
};

node st(0,2505);

int dp(int l, int r){
	if(l==1&&r==n) return 0;
	if(memo[l][r]!=-1) return memo[l][r];
	int ans=1e15;
	//show2(l,l,r,r);
	pair<pii,pii>hold=st.query(l,r);
	//show2(hold.first.first,hold.first.first,hold.first.second,hold.first.second);
	//show2(hold.second.first,hold.second.first,hold.second.second,hold.second.second);
	if(hold.first.first<l||hold.first.second>r){
		ans=min(ans,dp(min(l,hold.first.first),max(r,hold.first.second))+1);
	}
	if(hold.second.second>r||hold.second.first<l){
		ans=min(ans,dp(min(l,hold.second.first),max(r,hold.second.second))+1);
	}
	return memo[l][r]=ans;
}

void solve(){
	cin >> n;
	for(int x=1;x<=n;x++){
		cin >> arr[x].first >> arr[x].second;
		st.upd(x,arr[x]);
	}
	
	int q;
	cin >> q;
	int temp;
	memset(memo,-1,sizeof(memo));
	for(int x=0;x<q;x++){
		cin >> temp;
		int hold=dp(arr[temp].first,arr[temp].second);
		if(hold>1e12){
			cout << -1 << "\n";
		}
		else cout << hold+1 << "\n";
	}
}
 
int32_t main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t=1;
	//freopen("in.txt","r",stdin);
	//cin >> t;
	while(t--){
		solve();
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 53852 KB Output is correct
2 Correct 20 ms 53848 KB Output is correct
3 Correct 21 ms 53852 KB Output is correct
4 Runtime error 3 ms 1524 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 53932 KB Output is correct
2 Correct 20 ms 53916 KB Output is correct
3 Correct 20 ms 53852 KB Output is correct
4 Correct 19 ms 53852 KB Output is correct
5 Correct 21 ms 53820 KB Output is correct
6 Correct 20 ms 53848 KB Output is correct
7 Correct 20 ms 53852 KB Output is correct
8 Correct 21 ms 53744 KB Output is correct
9 Correct 20 ms 54104 KB Output is correct
10 Correct 21 ms 53852 KB Output is correct
11 Correct 20 ms 53852 KB Output is correct
12 Correct 20 ms 53848 KB Output is correct
13 Correct 24 ms 53820 KB Output is correct
14 Correct 23 ms 53852 KB Output is correct
15 Correct 20 ms 53852 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 53932 KB Output is correct
2 Correct 20 ms 53916 KB Output is correct
3 Correct 20 ms 53852 KB Output is correct
4 Correct 19 ms 53852 KB Output is correct
5 Correct 21 ms 53820 KB Output is correct
6 Correct 20 ms 53848 KB Output is correct
7 Correct 20 ms 53852 KB Output is correct
8 Correct 21 ms 53744 KB Output is correct
9 Correct 20 ms 54104 KB Output is correct
10 Correct 21 ms 53852 KB Output is correct
11 Correct 20 ms 53852 KB Output is correct
12 Correct 20 ms 53848 KB Output is correct
13 Correct 24 ms 53820 KB Output is correct
14 Correct 23 ms 53852 KB Output is correct
15 Correct 20 ms 53852 KB Output is correct
16 Correct 20 ms 53848 KB Output is correct
17 Incorrect 22 ms 53844 KB Output isn't correct
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 53932 KB Output is correct
2 Correct 20 ms 53916 KB Output is correct
3 Correct 20 ms 53852 KB Output is correct
4 Correct 19 ms 53852 KB Output is correct
5 Correct 21 ms 53820 KB Output is correct
6 Correct 20 ms 53848 KB Output is correct
7 Correct 20 ms 53852 KB Output is correct
8 Correct 21 ms 53744 KB Output is correct
9 Correct 20 ms 54104 KB Output is correct
10 Correct 21 ms 53852 KB Output is correct
11 Correct 20 ms 53852 KB Output is correct
12 Correct 20 ms 53848 KB Output is correct
13 Correct 24 ms 53820 KB Output is correct
14 Correct 23 ms 53852 KB Output is correct
15 Correct 20 ms 53852 KB Output is correct
16 Correct 20 ms 53848 KB Output is correct
17 Incorrect 22 ms 53844 KB Output isn't correct
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 53852 KB Output is correct
2 Correct 20 ms 53848 KB Output is correct
3 Correct 21 ms 53852 KB Output is correct
4 Runtime error 3 ms 1524 KB Execution killed with signal 11
5 Halted 0 ms 0 KB -