Submission #1286860

#TimeUsernameProblemLanguageResultExecution timeMemory
1286860kerem즐거운 채소 기르기 (JOI14_growing)C++20
0 / 100
10 ms2380 KiB
#include <bits/stdc++.h>
using namespace std;
//~ #define int int64_t
#define pb push_back
#define emb emplace_back
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define N 300000
#define inf (int)1e9
typedef pair<int,int> ii;
typedef tuple<int,int,int> iii;

int n,ft[N+5];
void update(int x){
	for(int i=x;i<=n;i+=-i&i)
		ft[i]++;
}
int get(int x){
	int ans=0;
	for(int i=x;i>0;i-=-i&i)
		ans+=ft[i];
	return ans;
}
void solve(){
	cin >> n;
	int a[n],zip[n];
	for(int i=0;i<n;i++){
		cin >> a[i];
		zip[i]=i;
	}
	sort(zip,zip+n,[&a](int x,int y){
		return a[x]<a[y];
	});
	int say=1;
	for(int i=0;i<n;i++){
		if(i && a[zip[i]]!=a[zip[i-1]])
			say++;
		a[zip[i]]=say;
	}
	int l[n],r[n];
	memset(ft,0,sizeof(ft));
	for(int i=0;i<n;i++){
		l[i]=(i!=0?l[i-1]:0);
		l[i]+=i-get(a[i]);
		update(a[i]);
	}
	memset(ft,0,sizeof(ft));
	for(int i=n-1;i>=0;i--){
		r[i]=(i!=n-1?r[i+1]:0);
		r[i]+=(n-i-1)-get(a[i]);
		update(a[i]);
	}
	int64_t ans=n*n;
	for(int i=1;i<n;i++)
		ans=min(ans,(int64_t)l[i-1]+r[i]);
	cout << ans << endl;
}
int32_t main(){
	//~ freopen("hopscotch.in","r",stdin);
	//~ freopen("hopscotch.out","w",stdout);
	
	cout << fixed << setprecision(0);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
	
	int test=1;
	//~ cin >> test;
	while(test--) solve();
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...