2732021-06-22 15:23:51mraronNövekvő Ödön és a Másoló Varázslócpp14Elfogadva 100/100554ms95740 KiB
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<cassert>
#include<cassert>
#include<unordered_map>
#include<unordered_set>
#include<functional>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<sstream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<numeric>
#include<random>
#include<chrono>
#include<bitset>
using namespace std;

#define all(x) (x).begin(), (x).end()
#define pb push_back
#define xx first
#define yy second
#define sz(x) (int)(x).size()
#define gc getchar
#define IO ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define mp make_pair

#ifndef ONLINE_JUDGE
#  define LOG(x) (cerr << #x << " = " << (x) << endl)
#else
#  define LOG(x) ((void)0)
#endif

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

const double PI=acos(-1);
const ll INF = 1LL<<62;
const ll MINF = -(1LL<<62);

template<typename T> T getint() {
	T val=0;
	char c;
	
	bool neg=false;
	while((c=gc()) && !(c>='0' && c<='9')) {
		neg|=c=='-';
	}

	do {
		val=(val*10)+c-'0';
	} while((c=gc()) && (c>='0' && c<='9'));

	return val*(neg?-1:1);
}

//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_int_distribution<int>(0, n-1)(rng)
vector<int> a,b,pos;
vector<int> dp;

vector<int> solve(int l, int r) {
	if(l==r) {
		if(pos[l]>=l) dp[l]=max(dp[l], 1);
		return {l};
	}
	
	int mid=(l+r)/2;
	vector<int> lst=solve(l, mid);
	lst.reserve(r-l+1);
	
	if(mid+1<=r) {
		for(int i=mid+1;i<=r;++i) lst.pb(i);
		
		sort(lst.begin()+mid+1-l, lst.end(), [&](int x, int y) -> bool {
			return a[x]<a[y];
		});
		
		
	}

	inplace_merge(lst.begin(),lst.begin()+mid+1-l,lst.end(), [&](int x, int y) -> bool {
		return a[x]<a[y];
	});
	
	set<pair<int,int>> st; //{i-pos[i], dp[i]}
	for(auto i:lst) {
		if(i<=mid) {
			st.insert(mp(i-pos[i], dp[i]));
			auto it=st.lower_bound(mp(i-pos[i], dp[i]));
			while(it!=st.begin() && prev(it)->yy<=it->yy) st.erase(prev(it));
			if(next(it)!=st.end() && next(it)->yy>=it->yy) st.erase(it);
		}else {
			auto it=st.lower_bound(mp(i-pos[i]-1, 0));
			if(it!=st.end()) {
				dp[i]=max(dp[i], it->yy+1);
			}
		}
	}
	
	solve(mid+1, r);
	return lst;
}

int main() {
	IO;
	int n,m;
	cin>>n>>m;
	a=vector<int>(n);
	b=vector<int>(m);
	for(int i=0;i<n;++i) {
		cin>>a[i];
	}
	
	for(int i=0;i<m;++i) {
		cin>>b[i];
	}
	
	n++;
	a.pb(1e9+1);
	
	sort(all(b));
	
	pos=vector<int>(n);
	for(int i=0;i<n;++i) {
		pos[i]=lower_bound(all(b),a[i])-b.begin();
	}
	
	dp=vector<int>(n,-1e9);

	solve(0,n-1);
	cout<<n-dp[n-1]<<"\n";
		
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva2ms1756 KiB
2Elfogadva107ms5188 KiB
subtask25/5
3Elfogadva39ms6096 KiB
4Elfogadva45ms8024 KiB
5Elfogadva39ms9968 KiB
subtask310/10
6Elfogadva1ms8656 KiB
7Elfogadva1ms8664 KiB
8Elfogadva1ms8664 KiB
subtask415/15
9Elfogadva1ms8688 KiB
10Elfogadva2ms8692 KiB
11Elfogadva1ms8704 KiB
12Elfogadva2ms8716 KiB
subtask55/5
13Elfogadva7ms9100 KiB
14Elfogadva8ms9200 KiB
15Elfogadva10ms9304 KiB
subtask65/5
16Elfogadva7ms9400 KiB
17Elfogadva7ms9504 KiB
18Elfogadva8ms9608 KiB
19Elfogadva7ms9572 KiB
subtask710/10
20Elfogadva7ms9780 KiB
21Elfogadva12ms9880 KiB
22Elfogadva9ms9996 KiB
23Elfogadva4ms9912 KiB
24Elfogadva8ms10012 KiB
subtask825/25
25Elfogadva119ms16660 KiB
26Elfogadva145ms18584 KiB
27Elfogadva125ms20528 KiB
28Elfogadva1ms15656 KiB
29Elfogadva237ms22796 KiB
30Elfogadva153ms24404 KiB
31Elfogadva159ms26300 KiB
32Elfogadva173ms28216 KiB
33Elfogadva200ms30168 KiB
34Elfogadva188ms32096 KiB
35Elfogadva219ms34032 KiB
36Elfogadva162ms35984 KiB
37Elfogadva172ms37916 KiB
38Elfogadva199ms39856 KiB
39Elfogadva246ms42168 KiB
40Elfogadva163ms43676 KiB
41Elfogadva204ms45676 KiB
42Elfogadva93ms45220 KiB
43Elfogadva150ms48772 KiB
44Elfogadva158ms50712 KiB
45Elfogadva187ms52640 KiB
subtask925/25
46Elfogadva400ms61780 KiB
47Elfogadva407ms65664 KiB
48Elfogadva342ms69524 KiB
49Elfogadva504ms73520 KiB
50Elfogadva522ms77832 KiB
51Elfogadva554ms81632 KiB
52Elfogadva328ms83712 KiB
53Elfogadva374ms87512 KiB
54Elfogadva405ms91864 KiB
55Elfogadva314ms95740 KiB