273 2021. 06. 22 15:23:51 mraron Növekvő Ödön és a Másoló Varázsló cpp14 Elfogadva 100/100 554ms 95740 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 2ms 1756 KiB
2 Elfogadva 107ms 5188 KiB
subtask2 5/5
3 Elfogadva 39ms 6096 KiB
4 Elfogadva 45ms 8024 KiB
5 Elfogadva 39ms 9968 KiB
subtask3 10/10
6 Elfogadva 1ms 8656 KiB
7 Elfogadva 1ms 8664 KiB
8 Elfogadva 1ms 8664 KiB
subtask4 15/15
9 Elfogadva 1ms 8688 KiB
10 Elfogadva 2ms 8692 KiB
11 Elfogadva 1ms 8704 KiB
12 Elfogadva 2ms 8716 KiB
subtask5 5/5
13 Elfogadva 7ms 9100 KiB
14 Elfogadva 8ms 9200 KiB
15 Elfogadva 10ms 9304 KiB
subtask6 5/5
16 Elfogadva 7ms 9400 KiB
17 Elfogadva 7ms 9504 KiB
18 Elfogadva 8ms 9608 KiB
19 Elfogadva 7ms 9572 KiB
subtask7 10/10
20 Elfogadva 7ms 9780 KiB
21 Elfogadva 12ms 9880 KiB
22 Elfogadva 9ms 9996 KiB
23 Elfogadva 4ms 9912 KiB
24 Elfogadva 8ms 10012 KiB
subtask8 25/25
25 Elfogadva 119ms 16660 KiB
26 Elfogadva 145ms 18584 KiB
27 Elfogadva 125ms 20528 KiB
28 Elfogadva 1ms 15656 KiB
29 Elfogadva 237ms 22796 KiB
30 Elfogadva 153ms 24404 KiB
31 Elfogadva 159ms 26300 KiB
32 Elfogadva 173ms 28216 KiB
33 Elfogadva 200ms 30168 KiB
34 Elfogadva 188ms 32096 KiB
35 Elfogadva 219ms 34032 KiB
36 Elfogadva 162ms 35984 KiB
37 Elfogadva 172ms 37916 KiB
38 Elfogadva 199ms 39856 KiB
39 Elfogadva 246ms 42168 KiB
40 Elfogadva 163ms 43676 KiB
41 Elfogadva 204ms 45676 KiB
42 Elfogadva 93ms 45220 KiB
43 Elfogadva 150ms 48772 KiB
44 Elfogadva 158ms 50712 KiB
45 Elfogadva 187ms 52640 KiB
subtask9 25/25
46 Elfogadva 400ms 61780 KiB
47 Elfogadva 407ms 65664 KiB
48 Elfogadva 342ms 69524 KiB
49 Elfogadva 504ms 73520 KiB
50 Elfogadva 522ms 77832 KiB
51 Elfogadva 554ms 81632 KiB
52 Elfogadva 328ms 83712 KiB
53 Elfogadva 374ms 87512 KiB
54 Elfogadva 405ms 91864 KiB
55 Elfogadva 314ms 95740 KiB