제출 #1359238

#제출 시각아이디문제언어결과실행 시간메모리
1359238habibie.lukmanStove (JOI18_stove)C++20
20 / 100
0 ms344 KiB
//Author: Habibie
#include <bits/stdc++.h>
#pragma GCC optimize("O3","unroll-loops")
using namespace std;
#define pb emplace_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define lb(v, x) (int)(lower_bound(all(v),x)-v.begin())
#define ub(v, x) (int)(upper_bound(all(v),x)-v.begin())
#define uni(v) v.resize(unique(all(v))-v.begin())
#define sz(x) (int)x.size()
#define srt(v) sort(all(v))
#define inf 0x3f3f3f3f
using ll=long long;
using ull=unsigned long long;
using pii=pair<int,int>;
using i128=__int128;
int fa[100200];
inline int anc(int x)
{
	while(fa[x]!=x) x=fa[x]=fa[fa[x]];
	return x;
}
int t[100200],f[100200];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,k;
	cin>>n>>k;
	vector<pii> dis;
	for(int i=0;i<n;i++)
	{
		cin>>t[i];
		fa[i]=i,f[i]=1;
		if(i) dis.pb(t[i]-t[i-1]-1,i);
	}
	srt(dis);
	for(int i=0;i<n-k;i++)
	{
		anc(dis[i].second-1);
		anc(dis[i].second);
		f[fa[dis[i].second]]+=f[fa[dis[i].second-1]]+dis[i].first;
		fa[fa[dis[i].second-1]]=fa[dis[i].second];
	}
	int r=0;
	for(int i=0;i<n;i++)
		if(fa[i]==i)
			r+=f[i];
	cout<<r<<'\n';
	return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…