12702022-03-29 13:21:47vandrasNövekvő Ödön és a Másoló Varázslócpp14Wrong answer 25/100697ms71964 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];

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

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

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

	a[0] = -1;
	a[n+1] = INF;

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

	for(int i = 2; i <= n+1; ++i){
		dp[i] = INF;
		int bpos = lower_bound(b+1, b+m+1, a[i])-b-1;


		if(a[i-1] < a[i]){
			dp[i] = dp[i-1];
		}

		int cnt = 0;
		for(int j = i-1; j > 0 && bpos > 0; --j, --bpos){
			if(a[j-1] < b[bpos] && dp[j-1] < INF){
				dp[i] = min(dp[i], dp[j-1] + (i-j));
				++cnt;
				if(cnt > 3) break;
			}
		}
	}

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

	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted2ms1908 KiB
2Wrong answer426ms4120 KiB
subtask25/5
3Accepted39ms6380 KiB
4Accepted39ms8312 KiB
5Accepted41ms10256 KiB
subtask310/10
6Accepted1ms8752 KiB
7Accepted1ms8752 KiB
8Accepted1ms8756 KiB
subtask40/15
9Wrong answer1ms8764 KiB
10Accepted1ms8772 KiB
11Accepted1ms8776 KiB
12Accepted1ms8792 KiB
subtask55/5
13Accepted3ms8976 KiB
14Accepted3ms9076 KiB
15Accepted3ms9180 KiB
subtask65/5
16Accepted35ms9276 KiB
17Accepted25ms9384 KiB
18Accepted13ms9480 KiB
19Accepted20ms9580 KiB
subtask70/10
20Accepted4ms9648 KiB
21Wrong answer7ms9756 KiB
22Accepted18ms9860 KiB
23Wrong answer4ms9940 KiB
24Wrong answer4ms10016 KiB
subtask80/25
25Time limit exceeded628ms11832 KiB
26Time limit exceeded694ms13712 KiB
27Time limit exceeded619ms15680 KiB
28Accepted1ms15736 KiB
29Time limit exceeded629ms17652 KiB
30Wrong answer76ms21920 KiB
31Wrong answer68ms23860 KiB
32Wrong answer116ms25816 KiB
33Wrong answer515ms27740 KiB
34Wrong answer361ms29680 KiB
35Time limit exceeded652ms31604 KiB
36Wrong answer101ms33608 KiB
37Wrong answer178ms35484 KiB
38Time limit exceeded672ms35104 KiB
39Time limit exceeded697ms37028 KiB
40Time limit exceeded694ms39020 KiB
41Time limit exceeded693ms41004 KiB
42Wrong answer28ms43376 KiB
43Accepted133ms46368 KiB
44Wrong answer116ms48276 KiB
45Wrong answer361ms50212 KiB
subtask90/25
46Wrong answer321ms56364 KiB
47Time limit exceeded690ms56904 KiB
48Wrong answer174ms64156 KiB
49Time limit exceeded694ms64276 KiB
50Time limit exceeded697ms68148 KiB
51Time limit exceeded605ms71964 KiB
52Wrong answer400ms62044 KiB
53Time limit exceeded612ms38508 KiB
54Time limit exceeded648ms42324 KiB
55Time limit exceeded619ms46028 KiB