답안 #641777

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
641777 2022-09-17T15:26:03 Z manizare Exam (eJOI20_exam) C++14
0 / 100
3 ms 852 KB
#include<bits/stdc++.h>
 
#define all(a) a.begin(),a.end()
#define pb push_back
#define int long long
using namespace std ;
 
const int maxn = 5002 , maxq = 1e5+10 , mod = 998244353 ,inf = 1e18 ;
int dp[3][maxn][maxn] , n , a[maxq] , b[maxq] , l[maxq] , r[maxq] , c[maxq] , p[maxq]  ;
stack<int> s , t;

int solve(int n){
	map <int , int > m ;
	int cnt = 1 ;
	for(int i = 1; i <= n ; i++){
		m[a[i]] = cnt ;
		cnt++;
		p[cnt] = i ;
	}
	vector <int> v , last ;
	last.pb(0);
	for(int i = 1; i <= n ; i++){
		last.pb(inf);
		if(m[b[i]] == 0)continue ;
		int ind = p[m[b[i]]] ;
		if(l[ind] < i && r[ind] > i){
			v.pb(b[i]);
		}
	}
	int ans = 0 ;
	for(int i = 0; i < v.size() ; i++){
		int x = upper_bound(all(last) , v[i])- last.begin() - 1;
		last[x+1] = min(last[x+1] , v[i]);
		ans = max(last[x+1] , ans); 
	}
	return ans ;
}

signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin >>n ;
	for(int i =1 ; i <= n ; i++){
		cin >> a[i];
	}
	for(int i= 1; i <= n ; i++){
		while(s.size() && a[i] >= a[s.top()])s.pop();
		if(s.size() == 0){
			l[i] = 0 ;
		}else{
			l[i] = s.top();
		}
		s.push(i);
	}
	for(int i = n; i >= 1 ; i--){
		while(t.size() && a[i] >= a[t.top()])t.pop();
		if(t.size() == 0){
			r[i] = n+1 ;
		}else{
			r[i] = t.top();
		}
		t.push(i);
	}
	for(int i = 1; i <= n ; i++){
		cin >> b[i] ;
	//	cout << l[i] << " " << r[i] <<"<-\n";
	}
	if(1){
		cout << solve(n) << "\n" ;
		return 0 ;
	}
	for(int i = 1; i <= n ; i++){
		for(int j =1  ; j <= n ; j++){
			dp[0][i][j] = max(dp[0][i-1][j] , dp[1][i-1][j]);
			dp[1][i][j] = max(max(dp[0][i-1][j-1] , dp[1][i-1][j-1])  , dp[1][i][j-1]) + ((j > l[i] && r[i] > j) && a[i] == b[j]) ;
		}
	}
	for(int i = 1; i <= n ; i++){
		for(int j =1 ; j <= n ; j++){
	//		cout << dp[0][i][j]  << " " << dp[1][i][j] << "       ";
		}
	//	cout << "\n";
	}
	cout << max(dp[0][n][n] , dp[1][n][n]) << "\n";
	return 0 ;
}

Compilation message

exam.cpp: In function 'long long int solve(long long int)':
exam.cpp:31:19: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |  for(int i = 0; i < v.size() ; i++){
      |                 ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Incorrect 0 ms 340 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 852 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Incorrect 0 ms 340 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Incorrect 0 ms 340 KB Output isn't correct
4 Halted 0 ms 0 KB -