12702022-03-29 13:21:47vandrasNövekvő Ödön és a Másoló Varázslócpp14Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva2ms1908 KiB
2Hibás válasz426ms4120 KiB
subtask25/5
3Elfogadva39ms6380 KiB
4Elfogadva39ms8312 KiB
5Elfogadva41ms10256 KiB
subtask310/10
6Elfogadva1ms8752 KiB
7Elfogadva1ms8752 KiB
8Elfogadva1ms8756 KiB
subtask40/15
9Hibás válasz1ms8764 KiB
10Elfogadva1ms8772 KiB
11Elfogadva1ms8776 KiB
12Elfogadva1ms8792 KiB
subtask55/5
13Elfogadva3ms8976 KiB
14Elfogadva3ms9076 KiB
15Elfogadva3ms9180 KiB
subtask65/5
16Elfogadva35ms9276 KiB
17Elfogadva25ms9384 KiB
18Elfogadva13ms9480 KiB
19Elfogadva20ms9580 KiB
subtask70/10
20Elfogadva4ms9648 KiB
21Hibás válasz7ms9756 KiB
22Elfogadva18ms9860 KiB
23Hibás válasz4ms9940 KiB
24Hibás válasz4ms10016 KiB
subtask80/25
25Időlimit túllépés628ms11832 KiB
26Időlimit túllépés694ms13712 KiB
27Időlimit túllépés619ms15680 KiB
28Elfogadva1ms15736 KiB
29Időlimit túllépés629ms17652 KiB
30Hibás válasz76ms21920 KiB
31Hibás válasz68ms23860 KiB
32Hibás válasz116ms25816 KiB
33Hibás válasz515ms27740 KiB
34Hibás válasz361ms29680 KiB
35Időlimit túllépés652ms31604 KiB
36Hibás válasz101ms33608 KiB
37Hibás válasz178ms35484 KiB
38Időlimit túllépés672ms35104 KiB
39Időlimit túllépés697ms37028 KiB
40Időlimit túllépés694ms39020 KiB
41Időlimit túllépés693ms41004 KiB
42Hibás válasz28ms43376 KiB
43Elfogadva133ms46368 KiB
44Hibás válasz116ms48276 KiB
45Hibás válasz361ms50212 KiB
subtask90/25
46Hibás válasz321ms56364 KiB
47Időlimit túllépés690ms56904 KiB
48Hibás válasz174ms64156 KiB
49Időlimit túllépés694ms64276 KiB
50Időlimit túllépés697ms68148 KiB
51Időlimit túllépés605ms71964 KiB
52Hibás válasz400ms62044 KiB
53Időlimit túllépés612ms38508 KiB
54Időlimit túllépés648ms42324 KiB
55Időlimit túllépés619ms46028 KiB