100392024-03-25 18:15:03111Növekvő Ödön és a Másoló Varázslócpp17Hibás válasz 25/100224ms96924 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define INF 999999

int N,M;
int F[1000000];

void add(int i,int x){
	for(i++;i<1000000;i+=i&-i){
		F[i]+=x;
	}
}

void add(int i,int j,int x){
	add(i,x);
	add(j+1,-x);
}

int get(int i){
	int x=0;
	for(i++;i;i-=i&-i){
		x+=F[i];
	}
	return x;
}

void sset(int i,int x){
	add(i,i,x-get(i));
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>N>>M;
	vector<int>v(N+1),w(M),u(N+1);
	for(int i=1;i<=N;i++){
		cin>>v[i];
	}
	for(int i=0;i<M;i++){
		cin>>w[i];
	}
	sort(w.begin(),w.end());
	for(int i=1;i<=N;i++){
		u[i]=upper_bound(w.begin(),w.end(),v[i])-w.begin();
	}
	int a=0,l=0,h=500000;
	add(0,h-1,INF);
	h++;
	for(int i=1;i<=N;i++){
		int aa=INF;
		int j=u[i]-1;
		if(j>=l){
			aa=min(aa,get(h+j));
		}
		h--;
		if(w[l]>v[i-1]&&a<INF){
			sset(h+l,get(h+l+1));
		}
		else{
			l++;
		}
		int ll=l,hh=M;
		while(ll<hh){
			int mm=(ll+hh)/2;
			if(get(h+mm)<=a){
				hh=mm;
			}
			else{
				ll=mm+1;
			}
		}
		add(h+l,h+u[i-1]-1,1);
		add(h+ll,h+M-1,1);
		if(v[i]>v[i-1]){
			aa=min(aa,a);
		}
		a=aa;
	}
	int ans=a;
	for(int i=l;i<M;i++){
		ans=min(ans,get(h+i));
	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms2028 KiB
2Hibás válasz48ms7012 KiB
subtask25/5
3Elfogadva57ms6716 KiB
4Elfogadva57ms6712 KiB
5Elfogadva57ms6780 KiB
subtask310/10
6Elfogadva3ms3888 KiB
7Elfogadva3ms3852 KiB
8Elfogadva3ms4104 KiB
subtask40/15
9Hibás válasz3ms4476 KiB
10Hibás válasz3ms4548 KiB
11Hibás válasz3ms4756 KiB
12Hibás válasz3ms4892 KiB
subtask55/5
13Elfogadva6ms5508 KiB
14Elfogadva6ms5464 KiB
15Elfogadva6ms5820 KiB
subtask65/5
16Elfogadva6ms5820 KiB
17Elfogadva6ms5608 KiB
18Elfogadva6ms5760 KiB
19Elfogadva6ms5816 KiB
subtask70/10
20Hibás válasz6ms5932 KiB
21Hibás válasz6ms5940 KiB
22Elfogadva7ms6064 KiB
23Hibás válasz4ms5940 KiB
24Hibás válasz7ms6144 KiB
subtask80/25
25Elfogadva90ms15160 KiB
26Elfogadva90ms17128 KiB
27Elfogadva89ms19168 KiB
28Elfogadva3ms11464 KiB
29Elfogadva105ms21188 KiB
30Hibás válasz86ms21804 KiB
31Hibás válasz85ms24456 KiB
32Hibás válasz85ms27072 KiB
33Hibás válasz89ms28908 KiB
34Hibás válasz87ms30976 KiB
35Hibás válasz90ms32828 KiB
36Hibás válasz83ms34036 KiB
37Hibás válasz85ms36700 KiB
38Hibás válasz90ms38456 KiB
39Elfogadva105ms40404 KiB
40Elfogadva93ms42312 KiB
41Hibás válasz92ms44304 KiB
42Hibás válasz54ms42004 KiB
43Hibás válasz90ms46072 KiB
44Hibás válasz86ms49284 KiB
45Hibás válasz87ms51308 KiB
subtask90/25
46Hibás válasz167ms62932 KiB
47Hibás válasz175ms67044 KiB
48Hibás válasz172ms69180 KiB
49Elfogadva222ms74808 KiB
50Elfogadva224ms78572 KiB
51Hibás válasz224ms82484 KiB
52Hibás válasz163ms83328 KiB
53Hibás válasz182ms88300 KiB
54Hibás válasz184ms92768 KiB
55Elfogadva185ms96924 KiB