Submission #1316417

#TimeUsernameProblemLanguageResultExecution timeMemory
1316417krazeeStove (JOI18_stove)C++20
100 / 100
30 ms4924 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define se second #define fi first using namespace std; int par[100005]; int root(int x){ if(par[x]==x)return x; return par[x]=root(par[x]); } void merge(int a, int b){ int x=root(a), y=root(b); par[x]=y; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int n, k; cin>>n>>k; int t[n+5]={}, ans=n, mx=0, mn=1e9, res=0; priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>>pq; for(int i=1; i<=n; i++){ cin>>t[i]; par[i]=i; if(i!=1)pq.push({t[i]-t[i-1], {i-1, i}}); } while(!pq.empty()&&ans!=k){ int f=pq.top().fi, g=pq.top().se.fi, h=pq.top().se.se; pq.pop(); merge(g, h); ans--; } mx=mn=t[1]; for(int i=2; i<=n; i++){ if(root(i)!=root(i-1)){ res+=mx-mn+1; mx=mn=t[i]; } mx=max(mx, t[i]); mn=min(mn, t[i]); } res+=mx-mn+1; cout<<res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...