12612022-03-29 12:01:43vandrasNövekvő Ödön és a Másoló Varázslócpp14Időlimit túllépés 0/100697ms54264 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 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;
		int bpos = lower_bound(b+1, b+m+1, a[i])-b-1;
		debug() << exp(a[i]) exp(b[bpos]) exp(bpos);

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

		}
	}

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

	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1884 KiB
2Időlimit túllépés666ms2920 KiB
subtask20/5
3Hibás válasz93ms7728 KiB
4Elfogadva90ms9668 KiB
5Elfogadva87ms11608 KiB
subtask30/10
6Elfogadva1ms8752 KiB
7Elfogadva1ms8756 KiB
8Hibás válasz1ms8760 KiB
subtask40/15
9Hibás válasz1ms8772 KiB
10Hibás válasz1ms8780 KiB
11Hibás válasz1ms8784 KiB
12Elfogadva1ms8796 KiB
subtask50/5
13Hibás válasz4ms9024 KiB
14Elfogadva4ms9120 KiB
15Hibás válasz4ms9224 KiB
subtask60/5
16Elfogadva24ms9320 KiB
17Hibás válasz18ms9424 KiB
18Hibás válasz10ms9524 KiB
19Elfogadva17ms9628 KiB
subtask70/10
20Hibás válasz8ms9696 KiB
21Hibás válasz8ms9804 KiB
22Elfogadva18ms9908 KiB
23Hibás válasz6ms9964 KiB
24Hibás válasz6ms10060 KiB
subtask80/25
25Időlimit túllépés652ms12664 KiB
26Időlimit túllépés623ms14548 KiB
27Időlimit túllépés671ms16544 KiB
28Elfogadva1ms15772 KiB
29Időlimit túllépés694ms18432 KiB
30Hibás válasz104ms23504 KiB
31Hibás válasz109ms25440 KiB
32Hibás válasz214ms27288 KiB
33Hibás válasz474ms29228 KiB
34Hibás válasz365ms31196 KiB
35Időlimit túllépés601ms33196 KiB
36Hibás válasz272ms35144 KiB
37Hibás válasz246ms36980 KiB
38Időlimit túllépés679ms35928 KiB
39Időlimit túllépés684ms37916 KiB
40Időlimit túllépés694ms39844 KiB
41Időlimit túllépés694ms41860 KiB
42Hibás válasz50ms44376 KiB
43Időlimit túllépés616ms44940 KiB
44Hibás válasz162ms40128 KiB
45Időlimit túllépés620ms31312 KiB
subtask90/25
46Időlimit túllépés614ms36588 KiB
47Időlimit túllépés615ms33664 KiB
48Hibás válasz430ms42312 KiB
49Időlimit túllépés602ms40996 KiB
50Időlimit túllépés601ms44696 KiB
51Időlimit túllépés601ms39504 KiB
52Hibás válasz400ms46940 KiB
53Időlimit túllépés690ms46672 KiB
54Időlimit túllépés697ms50624 KiB
55Időlimit túllépés689ms54264 KiB