12572022-03-29 11:32:58vandrasNövekvő Ödön és a Másoló Varázslócpp14Időlimit túllépés 40/100697ms62488 KiB
#include <bits/stdc++.h>
using namespace std;

/*<DEBUG>*/
#define tem template <typename 
#define can_shift(_X_, ...) enable_if_t<sizeof test<_X_>(0) __VA_ARGS__ 8, debug&> operator<<(T i)
#define _op debug& operator<<
tem C > auto test(C *x) -> decltype(cerr << *x, 0LL);
tem C > char test(...);
tem C > struct itr{C begin, end; };
tem C > itr<C> get_range(C b, C e) { return itr<C>{b, e}; }
struct debug{
#ifdef _LOCAL
	~debug(){ cerr << endl; }
	tem T > can_shift(T, ==){ cerr << boolalpha << i; return *this; }
	tem T> can_shift(T, !=){ return *this << get_range(begin(i), end(i)); }
	tem T, typename U > _op (pair<T, U> i){ 
		return *this << "< " << i.first << " , " << i.second << " >"; }
	tem T> _op (itr<T> i){
		*this <<  "{ ";
		for(auto it = i.begin; it != i.end; it++){
			*this << " , " + (it==i.begin?2:0) << *it;
		}
		return *this << " }";
	}
#else
tem T> _op (const T&) { return *this; }
#endif 
};

tem T>
string _ARR_(T* arr, int sz){
	string ret = "{ " + to_string(arr[0]); 
	for(int i = 1; i < sz; i++) ret += " , " +  to_string(arr[i]);
	ret += " }"; return ret;
}

#define exp(...) " [ " << #__VA_ARGS__ << " : " << (__VA_ARGS__) << " ]"
/*</DEBUG>*/

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int uint;
typedef pair<int, int> pii;
//mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

#define pb push_back
#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define TC int __TC__; cin >> __TC__; while(__TC__--)
#define ar array

const int INF = 1e9 + 7, N = 200005, M = 5003;

int a[N], b[N], n, m, dp[N];
vector<int> vals;

int get(int v){
	return lower_bound(vals.begin(), vals.end(), v) - vals.begin();
}

int cnt_between(int l, int r){
//	debug() << exp(lower_bound(b+1, b+m+1, l) - b) exp(l);
	return lower_bound(b+1, b+m+1, r) - lower_bound(b+1, b+m+1, l);
}

int main()
{
	FAST;
	cin >> n >> m;
	vals.resize(n+m);
	for(int i = 1; i <= n; ++i){
		cin >> a[i];
		vals[i-1] = a[i];
	}
	for(int i = 1; i <= m; ++i){
		cin >> b[i];
		vals[n+i-1] = b[i];
	}

	sort(vals.begin(), vals.end());

	a[0] = -1;
	for(int i = 1; i <= n; ++i) a[i] = get(a[i]);
	for(int i = 1; i <= m; ++i) b[i] = get(b[i]);

	sort(b+1, b+m+1);

	int mxN = vals.size();

	//dp[i] : best solution up to ith element (ith is left unchanged)

	dp[0] = 0;
	dp[1] = 0;


	a[n+1] = INF;
	for(int i = 2; i <= n+1; ++i){
		dp[i] = INF;
		for(int j = i-1; j >= 0; --j){
			if(a[j] < a[i] && cnt_between(a[j], a[i]) >= i-j-1) dp[i] = min(dp[i], dp[j] + i-j-1);
		}
	}

	cout << min(dp[n], dp[n+1]) << '\n';

	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva2ms1924 KiB
2Időlimit túllépés693ms2800 KiB
subtask25/5
3Elfogadva90ms7732 KiB
4Elfogadva93ms9660 KiB
5Elfogadva90ms11604 KiB
subtask310/10
6Elfogadva1ms8744 KiB
7Elfogadva1ms8756 KiB
8Elfogadva1ms8756 KiB
subtask415/15
9Elfogadva3ms8772 KiB
10Elfogadva3ms8776 KiB
11Elfogadva3ms8784 KiB
12Elfogadva3ms8788 KiB
subtask55/5
13Elfogadva270ms9120 KiB
14Elfogadva275ms9220 KiB
15Elfogadva294ms9324 KiB
subtask65/5
16Elfogadva268ms9428 KiB
17Elfogadva439ms9520 KiB
18Elfogadva395ms9624 KiB
19Elfogadva259ms9692 KiB
subtask70/10
20Időlimit túllépés661ms8752 KiB
21Időlimit túllépés681ms8792 KiB
22Időlimit túllépés680ms9988 KiB
23Elfogadva268ms9984 KiB
24Időlimit túllépés691ms9048 KiB
subtask80/25
25Időlimit túllépés694ms12700 KiB
26Időlimit túllépés694ms14580 KiB
27Időlimit túllépés694ms16648 KiB
28Elfogadva1ms15736 KiB
29Időlimit túllépés694ms18476 KiB
30Időlimit túllépés665ms20420 KiB
31Időlimit túllépés603ms22248 KiB
32Időlimit túllépés601ms24108 KiB
33Időlimit túllépés605ms21196 KiB
34Időlimit túllépés625ms23068 KiB
35Időlimit túllépés606ms25064 KiB
36Időlimit túllépés649ms27004 KiB
37Időlimit túllépés652ms28944 KiB
38Időlimit túllépés605ms24264 KiB
39Időlimit túllépés693ms26192 KiB
40Időlimit túllépés694ms28108 KiB
41Időlimit túllépés695ms30032 KiB
42Időlimit túllépés671ms30640 KiB
43Időlimit túllépés694ms33108 KiB
44Időlimit túllépés697ms35044 KiB
45Időlimit túllépés693ms37100 KiB
subtask90/25
46Időlimit túllépés694ms42476 KiB
47Időlimit túllépés675ms46344 KiB
48Időlimit túllépés685ms47204 KiB
49Időlimit túllépés694ms44028 KiB
50Időlimit túllépés694ms47844 KiB
51Időlimit túllépés689ms51720 KiB
52Időlimit túllépés694ms54672 KiB
53Időlimit túllépés695ms58496 KiB
54Időlimit túllépés694ms62488 KiB
55Időlimit túllépés689ms62416 KiB