답안 #678768

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
678768 2023-01-06T13:56:07 Z jamezzz Event Hopping (BOI22_events) C++17
25 / 100
1500 ms 17004 KB
#include <bits/stdc++.h>
using namespace std;

#ifdef DEBUG
#define dbg(...) printf(__VA_ARGS__);
#define getchar_unlocked getchar
#else
#define dbg(...)
#endif
#define sf scanf
#define pf printf
#define fi first
#define se second
#define pb push_back
#define psf push_front
#define ppb pop_back
#define ppf pop_front
#define sz(x) (int)x.size()
#define mnto(x,y) x=min(x,(__typeof__(x))y)
#define mxto(x,y) x=max(x,(__typeof__(x))y)
#define INF 1023456789
#define LINF 1023456789123456789
#define all(x) x.begin(),x.end()
#define lb(x,v) (lower_bound(all(x),v)-x.begin())
#define ub(x,v) (upper_bound(all(x),v)-x.begin())
#define disc(x) sort(all(x));x.resize(unique(all(x))-x.begin());
typedef long long ll;
typedef long double ld;
typedef pair<int,int> ii;
typedef pair<ll,ll> pll;
typedef tuple<int,int,int> iii;
typedef tuple<int,int,int,int> iiii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<ii> vii;
mt19937 rng(time(0));

#define mod 1000000007

inline int add(int a,int b){
	int r=a+b;
	while(r>=mod)r-=mod;
	while(r<0)r+=mod;
	return r;
}

inline int mult(int a,int b){
	return (int)(((ll)(a*b))%mod);
}

inline int rd(){
	int x=0;
	char ch=getchar_unlocked();
	while(!(ch&16))ch=getchar();//keep reading while current character is whitespace
    while(ch&16){//this will break when ‘\n’ or ‘ ‘ is encountered
		x=(x<<3)+(x<<1)+(ch&15);
		ch=getchar_unlocked();
	}
	return x;
}

#define maxn 100005

int n,q,m,s[maxn],e[maxn],st[20][2*maxn];
vector<int> d;

inline int qmn(int l,int r){
	int k=31-__builtin_clz(r-l+1);
	return min(st[k][l],st[k][r-(1<<k)+1]);
}

int main(){
	sf("%d%d",&n,&q);
	for(int i=0;i<n;++i){
		sf("%d%d",&s[i],&e[i]);
		d.pb(s[i]);d.pb(e[i]);
	}
	disc(d);
	for(int i=0;i<n;++i){
		s[i]=lb(d,s[i]);
		e[i]=lb(d,e[i]);
	}
	m=sz(d);
	for(int i=0;i<m;++i)st[0][i]=INF;
	for(int i=0;i<n;++i)mnto(st[0][e[i]],s[i]);
	for(int k=1;k<20;++k){
		for(int i=0;i+(1<<k)<=m;++i){
			st[k][i]=min(st[k-1][i],st[k-1][i+(1<<k-1)]);
		}
	}
	
	for(int i=0;i<q;++i){
		int x,y;sf("%d%d",&x,&y);
		if(x==y){
			pf("0\n");
			continue;
		}
		--x,--y;
		if(e[y]<e[x]){
			pf("impossible\n");
			continue;
		}
		int l=s[y],r=e[y];
		int ans=0;
		while(e[x]<l){
			int mn=qmn(l,r);
			if(l<=mn){
				ans=-1;
				break;
			}
			++ans;
			r=l-1;l=mn;
		}
		if(ans==-1)pf("impossible\n");
		else pf("%d\n",ans+1);
	}
}

Compilation message

events.cpp: In function 'int main()':
events.cpp:88:43: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   88 |    st[k][i]=min(st[k-1][i],st[k-1][i+(1<<k-1)]);
      |                                          ~^~
events.cpp:73:4: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   73 |  sf("%d%d",&n,&q);
      |    ^
events.cpp:75:5: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |   sf("%d%d",&s[i],&e[i]);
      |     ^
events.cpp:93:13: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   93 |   int x,y;sf("%d%d",&x,&y);
      |             ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Execution timed out 1597 ms 8224 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 232 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 232 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 312 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 2 ms 340 KB Output is correct
13 Correct 2 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 468 KB Output is correct
17 Correct 1 ms 468 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 1134 ms 2396 KB Output is correct
20 Execution timed out 1580 ms 1856 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 232 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 2 ms 444 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 320 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 468 KB Output is correct
17 Correct 1 ms 452 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 160 ms 10096 KB Output is correct
20 Correct 72 ms 9372 KB Output is correct
21 Correct 68 ms 10180 KB Output is correct
22 Correct 73 ms 12608 KB Output is correct
23 Correct 71 ms 16944 KB Output is correct
24 Correct 75 ms 17004 KB Output is correct
25 Correct 39 ms 3156 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1568 ms 8224 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Execution timed out 1597 ms 8224 KB Time limit exceeded
3 Halted 0 ms 0 KB -