Submission #100301

#TimeUsernameProblemLanguageResultExecution timeMemory
100301chpipisSimfonija (COCI19_simfonija)C++11
110 / 110
141 ms11000 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back #define pf push_front #define iter(v, i) for (__typeof__((v).begin()) i = (v).begin(); i != (v).end(); i++) #define fast_io_without_cstdio ios_base::sync_with_stdio(false), cin.tie(NULL) #define all(v) (v).begin(), (v).end() #define rep(i, s, e) for (int i = s; i < e; i++) // START for segment tree #define params int p, int L, int R #define housekeep int mid = (L + R) >> 1, left = p << 1, right = left | 1 // END #ifdef __linux__ #define gc getchar_unlocked #define pc putchar_unlocked #else #define gc getchar #define pc putchar #endif #if __cplusplus <= 199711L template<class BidirIt> BidirIt prev(BidirIt it, typename iterator_traits<BidirIt>::difference_type n = 1) { advance(it, -n); return it; } template<class ForwardIt> ForwardIt next(ForwardIt it, typename iterator_traits<ForwardIt>::difference_type n = 1) { advance(it, n); return it; } #endif typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector<ii> vii; typedef long double ldouble; const double EPS = 1e-9; const double PI = 3.141592653589793238462; template<typename T> inline T sq(T a) { return a * a; } //#ifdef LOCAL_MACHINE //#endif const int MAX_N = 1e5 + 5; int a[MAX_N], b[MAX_N]; int pos[MAX_N]; struct slope_ds { multiset<int> one, two; ll val; slope_ds() { val = 0; } void add(int p) { if (one.empty()) { one.insert(p); two.insert(p); val = 0; return; } int opt = *one.rbegin(); val += abs(opt - p); if (opt < p) { two.insert(p); two.insert(p); one.insert(*two.begin()); two.erase(two.begin()); } else { one.insert(p); one.insert(p); two.insert(*one.rbegin()); one.erase(prev(one.end())); } val -= abs(opt - *one.rbegin()); } void rem(int p) { int opt = *one.rbegin(); val -= abs(opt - p); if (opt < p) { two.insert(*one.rbegin()); one.erase(prev(one.end())); two.erase(two.find(p)); two.erase(two.find(p)); } else { one.insert(*two.begin()); two.erase(two.begin()); one.erase(one.find(p)); one.erase(one.find(p)); } val -= abs(opt - *one.rbegin()); } }; int main() { //freopen("", "r", stdin); //freopen("", "w", stdout); int n, k; scanf("%d %d", &n, &k); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { scanf("%d", &b[i]); } for (int i = 1; i <= n; i++) { pos[i] = a[i] - b[i]; } sort(pos + 1, pos + n + 1); slope_ds myds; for (int i = 1; i <= n - k; i++) { myds.add(pos[i]); } ll ans = myds.val; for (int i = 1; i <= k; i++) { myds.add(pos[n - k + i]); myds.rem(pos[i]); ans = min(ans, myds.val); } printf("%lld\n", ans); return 0; }

Compilation message (stderr)

simfonija.cpp: In function 'int main()':
simfonija.cpp:115:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &n, &k);
     ~~~~~^~~~~~~~~~~~~~~~~
simfonija.cpp:117:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &a[i]);
         ~~~~~^~~~~~~~~~~~~
simfonija.cpp:120:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &b[i]);
         ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...