제출 #317292

#제출 시각아이디문제언어결과실행 시간메모리
317292soroushStove (JOI18_stove)C++14
100 / 100
32 ms3196 KiB
/* #pragma GCC optimize("O2") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx,avx2,sse,sse2,fma,tune=native") //*/ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int ,int > pii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const ll maxn = 1e5+10; const ll mod =1e9+7; const ld PI = acos((ld)-1); #define pb push_back #define endl '\n' #define dokme(x) cout << x , exit(0) #define migmig ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define ms(x , y) memset(x , y , sizeof x) ll pw(ll a, ll b, ll md = mod){ll res = 1;while(b){if(b&1){res=(a*res)%md;}a=(a*a)%md;b>>=1;}return(res);} int n , k; int a[maxn] , sz[maxn]; int l[maxn] , r[maxn]; int par[maxn]; vector < int > e; bool cmp(int i , int j){ return(a[i + 1] - a[i] > a[j + 1] - a[j]); } int getpar(int v){ return((v == par[v]) ? v : par[v] = getpar(par[v])); } void merge(int v , int u){ v = getpar(v) , u = getpar(u); if(sz[v] < sz[u]) swap(u , v); sz[v] += sz[u]; par[u] = v; sz[u] = 0; l[v] = min(l[v] , l[u]); r[v] = max(r[v] , r[u]); } int32_t main(){ migmig; cin >> n >> k; for(int i = 1 ; i <= n; i ++) cin >> a[i] , par[i] = i , l[i] = r[i] = a[i], e.pb(i) , sz[i] = 1; e.pop_back(); int cnt = n ; sort(e.begin() , e.end() , cmp); while(cnt!=k){ cnt --; int u = e.back(); e.pop_back(); merge(u , u + 1); } ll ans = 0; for(int i = 1 ; i <= n ; i ++) if(sz[i])ans += r[i] - l[i] + 1; cout << ans; return(0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...