제출 #1238119

#제출 시각아이디문제언어결과실행 시간메모리
1238119M_SH_OJust Long Neckties (JOI20_ho_t1)C++20
100 / 100
205 ms14724 KiB
/*#pragma GCC optimize("O3") #pragma GCC optimization("Ofast,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")*/ #include <bits/stdc++.h> /*#include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp>*/ #define ll int #define ll1 long long #define ull unsigned long long #define dou long double #define str string #define vll vector<ll> #define vi vector<int> #define pll pair<ll, ll> #define vpll vector<pll> #define vbool vector<bool> #define vstr vector<str> #define vvll vector<vll> #define pb push_back #define pf push_front #define endl "\n" #define fr first #define se second // #define sortcmp(a) sort(a.begin(), a.end(), cmp) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define speed ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define INF 1000000000000000007 #define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; //using namespace __gnu_pbds; mt19937 rng(time(0)); ll randll(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rng); } vvll tree; void bt(ll rt, ll v, ll tl, ll tr, vll& a) { if (tl == tr) { tree[rt][v] = a[tl]; return; } ll tm = (tl+tr)/2; bt(rt, v*2, tl, tm, a); bt(rt, v*2+1, tm+1, tr, a); tree[rt][v] = gcd(tree[rt][v*2], tree[rt][v*2+1]); } ll get(ll rt, ll l, ll r, ll v, ll tl, ll tr) { if (l <= tl && tr <= r) return tree[rt][v]; if (tl > r || tr < l) return 0; ll tm = (tl+tr)/2; //push(v, tl, tr); ll p = get(rt, l, r, v*2, tl, tm), p1 = get(rt, l, r, v*2+1, tm+1, tr); return gcd(p,p1); } int main(){ speed; srand(time(0)); ll n; cin >> n; vpll a(n+1); for (int i = 0; i < n+1; i ++) { cin >> a[i].fr; a[i].se = i; } vll b(n); for (int i = 0; i < n; i ++) { cin >> b[i]; } sort(b); sort(a); ll res = 0; vll ans(n+1); multiset<ll> s; for (int i = 0; i < n; i ++) { res = max(res, max((ll)0, a[i].fr-b[i])); s.insert(max((ll)0, a[i].fr-b[i])); } ans[a[n].se] = res; for (int i = n-1; i >= 0; i --) { s.erase(s.find(max((ll)0, a[i].fr-b[i]))); s.insert(max((ll)0, a[i+1].fr-b[i])); ans[a[i].se] = *--s.end(); } for (int i = 0; i < n+1; i ++) { cout << ans[i] << ' '; } cout << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...