Submission #1115591

#TimeUsernameProblemLanguageResultExecution timeMemory
1115591staszic_ojuzJust Long Neckties (JOI20_ho_t1)C++17
100 / 100
98 ms24824 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; typedef long long ll; struct dat { ll a; ll i; dat(): a(0), i(0) {}; }; bool operator<(dat a, dat b) { return a.a < b.a; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n; cin >> n; vector<dat> wol(n + 1); for(int i = 0; i < n + 1; i++) { cin >> wol[i].a; wol[i].i = i; } vector<ll> ma(n); for(int i = 0; i < n; i++) { cin >> ma[i]; } sort(wol.begin(), wol.end()); sort(ma.begin(), ma.end()); // cout << "WOL\n"; // for(int i = 0; i < n + 1; i++) { // cout << wol[i].a << " " << wol[i].i << '\n'; // } // vector<ll> pout(n + 1, 0); // for(int i = 0; i < n + 1; i++) { // pout[wol[i].i] = i; // } vector<dat> par1(n); vector<dat> par2(n); for(int i = 0; i < n; i++) { par1[i].i = wol[i].i; par1[i].a = max(wol[i].a - ma[i], (ll)0); par2[i].i = wol[i + 1].i; par2[i].a = max(wol[i + 1].a - ma[i], (ll)0); } vector<dat> pref(n + 2); vector<dat> suff(n + 2); pref[0].a = 0; pref[n + 1].a = 0; suff[0].a = 0; suff[n + 1].a = 0; pref[0].i = par2[n - 1].i; for(int i = 1; i < n + 1; i++) { if(pref[i - 1].a > par1[i - 1].a) { pref[i].a = pref[i - 1].a; } else { pref[i].a = par1[i - 1].a; } pref[i].i = par1[i - 1].i; } suff[n].i = par1[0].i; for(int i = n -1;i>=0;i--) { if(suff[i + 1].a > par2[i].a) { suff[i].a = suff[i + 1].a; } else { suff[i].a = par2[i].a; } suff[i].i = par2[i].i; } // cout << "PREF\n"; // for(int i = 0; i < n + 1; i++) { // cout << pref[i].a << " " << pref[i].i << '\n'; // } // cout << "SUFF\n"; // for(int i = 0; i < n + 1; i++) { // cout << suff[i].a << " " << suff[i].i << '\n'; // } vector<ll> out(n + 1); for(int i = 0; i < n + 1; i++) { //cout << "pout[i]: " << pout[i] <<", i: " << i << "pout: "<< pout[i] << endl; ll res = pref[i].a; res =max(pref[i].a, suff[i].a); out[wol[i].i] = res; //cout << wol[i].i << " "; } // cout << "pout\n"; // for(int i = 0; i < n + 1; i++) { // cout << out[i] << '\n'; // } for(int i = 0; i < n + 1; i++) { cout << out[i] << " "; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...