답안 #431612

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
431612 2021-06-17T13:35:49 Z errorgorn Long Mansion (JOI17_long_mansion) C++17
10 / 100
3000 ms 120344 KB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
#define endl '\n'

#define puf push_front
#define pof pop_front
#define pub push_back
#define pob pop_back
#define lb lower_bound
#define ub upper_bound

#define rep(x,s,e) for (auto x=s-(s>e);x!=e-(s>e);s<e?x++:x--)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int) (x).size()

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

struct node{
	int s,e,m;
	int val=0;
	node *l,*r;
	
	node (int _s,int _e){
		s=_s,e=_e,m=s+e>>1;
		
		if (s!=e){
			l=new node(s,m);
			r=new node(m+1,e);
		}
	}
	
	void update(int i,int k){
		if (s==e) val=max(val,k);
		else{
			if (i<=m) l->update(i,k);
			else if (m<i) r->update(i,k);
			
			val=max(l->val,r->val);
		}
	}
	
	int query(int i,int j){
		if (s==i && e==j) return val;
		else if (j<=m) return l->query(i,j);
		else if (m<i) return r->query(i,j);
		else return max(l->query(i,m),r->query(m+1,j));
	}
} *root;

int n,q;
int arr[500005];
vector<int> keys[500005];
ii queries[500005];
bool ans[500005];

int lpos[500005];
int rpos[500005];
int has[500005];

int bad[500005];

int main(){
	cin.tie(0);
	cout.tie(0);
	cin.sync_with_stdio(false);
	
	cin>>n;
	rep(x,1,n) cin>>arr[x];
	
	int a,b;
	rep(x,1,n+1){
		cin>>a;
		rep(y,0,a){
			cin>>b;
			keys[x].pub(b);
		}
	}
	
	cin>>q;
	rep(x,0,q) cin>>queries[x].fi>>queries[x].se;
	
	rep(zzz,0,2){ //change to 2 later
		rep(x,0,500005) has[x]=1e9;
		rep(x,n,1){
			for (auto &it:keys[x+1]) has[it]=x+1;
			lpos[x]=has[arr[x]];
		}
		
		rep(x,0,500005) has[x]=0;
		rep(x,1,n){
			for (auto &it:keys[x]) has[it]=x;
			rpos[x+1]=has[arr[x]];
		}
		
		//rep(x,1,n+1) cout<<lpos[x]<<" "; cout<<endl;
		//rep(x,1,n+1) cout<<rpos[x]<<" "; cout<<endl;
		
		//maximize y
		//lpos[x]>=y, so we add into segtree add in increasing y
		//segtree needs x>=rpos[y], so add rpos[y] into segtree
		//then we query maximum
		
		memset(bad,-1,sizeof(bad));
		root=new node(0,500005);
		
		vector<int> proc;
		rep(x,1,n) proc.pub(x);
		sort(all(proc),[](int i,int j){
			return lpos[i]<lpos[j];
		});
		
		int curr=2;
		for (auto &it:proc){
			while (curr<=n && curr<=lpos[it]){
				root->update(rpos[curr],curr);
				curr++;
			}
			
			bad[it]=root->query(0,it);
			if (lpos[it]==1e9) bad[it]=1e9;
		}
		
		//rep(x,1,n+1) cout<<bad[x]<<" "; cout<<endl<<endl;
		
		rep(x,0,q) if (queries[x].se<queries[x].fi){
			//cout<<"query: "<<x<<endl;
			
			bool can=true;
			rep(y,queries[x].se,queries[x].fi){
				//cout<<y<<" "<<bad[y]<<endl;
				if (queries[x].fi<bad[y]) can=false;
			}
			
			ans[x]=can;
		}
		
		//flip shit now
		reverse(arr+1,arr+n);
		reverse(keys+1,keys+n+1);
		rep(x,0,q) tie(queries[x].fi,queries[x].se)=ii(n-queries[x].fi+1,n-queries[x].se+1);
	}
	
	rep(x,0,q){
		if (ans[x]) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
}

Compilation message

long_mansion.cpp: In constructor 'node::node(int, int)':
long_mansion.cpp:29:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   29 |   s=_s,e=_e,m=s+e>>1;
      |               ~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 110120 KB Output is correct
2 Correct 118 ms 110128 KB Output is correct
3 Correct 145 ms 110308 KB Output is correct
4 Correct 111 ms 110132 KB Output is correct
5 Correct 128 ms 110048 KB Output is correct
6 Correct 127 ms 110124 KB Output is correct
7 Correct 133 ms 110156 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 110120 KB Output is correct
2 Correct 118 ms 110128 KB Output is correct
3 Correct 145 ms 110308 KB Output is correct
4 Correct 111 ms 110132 KB Output is correct
5 Correct 128 ms 110048 KB Output is correct
6 Correct 127 ms 110124 KB Output is correct
7 Correct 133 ms 110156 KB Output is correct
8 Correct 627 ms 119808 KB Output is correct
9 Correct 697 ms 119752 KB Output is correct
10 Correct 815 ms 120040 KB Output is correct
11 Correct 1227 ms 120300 KB Output is correct
12 Correct 438 ms 119956 KB Output is correct
13 Correct 256 ms 119996 KB Output is correct
14 Correct 270 ms 120000 KB Output is correct
15 Correct 418 ms 120032 KB Output is correct
16 Correct 797 ms 120344 KB Output is correct
17 Correct 291 ms 120032 KB Output is correct
18 Correct 305 ms 120004 KB Output is correct
19 Correct 309 ms 120100 KB Output is correct
20 Correct 651 ms 120252 KB Output is correct
21 Correct 854 ms 120332 KB Output is correct
22 Correct 486 ms 119992 KB Output is correct
23 Correct 379 ms 119876 KB Output is correct
24 Correct 357 ms 119836 KB Output is correct
25 Correct 392 ms 119872 KB Output is correct
26 Correct 299 ms 119868 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3043 ms 76552 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 110120 KB Output is correct
2 Correct 118 ms 110128 KB Output is correct
3 Correct 145 ms 110308 KB Output is correct
4 Correct 111 ms 110132 KB Output is correct
5 Correct 128 ms 110048 KB Output is correct
6 Correct 127 ms 110124 KB Output is correct
7 Correct 133 ms 110156 KB Output is correct
8 Correct 627 ms 119808 KB Output is correct
9 Correct 697 ms 119752 KB Output is correct
10 Correct 815 ms 120040 KB Output is correct
11 Correct 1227 ms 120300 KB Output is correct
12 Correct 438 ms 119956 KB Output is correct
13 Correct 256 ms 119996 KB Output is correct
14 Correct 270 ms 120000 KB Output is correct
15 Correct 418 ms 120032 KB Output is correct
16 Correct 797 ms 120344 KB Output is correct
17 Correct 291 ms 120032 KB Output is correct
18 Correct 305 ms 120004 KB Output is correct
19 Correct 309 ms 120100 KB Output is correct
20 Correct 651 ms 120252 KB Output is correct
21 Correct 854 ms 120332 KB Output is correct
22 Correct 486 ms 119992 KB Output is correct
23 Correct 379 ms 119876 KB Output is correct
24 Correct 357 ms 119836 KB Output is correct
25 Correct 392 ms 119872 KB Output is correct
26 Correct 299 ms 119868 KB Output is correct
27 Execution timed out 3043 ms 76552 KB Time limit exceeded
28 Halted 0 ms 0 KB -