Submission #1271957

#TimeUsernameProblemLanguageResultExecution timeMemory
1271957nerrrmin사탕 분배 (IOI21_candies)C++20
0 / 100
678 ms19696 KiB
#include "candies.h" #include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 10; int n, q; int r[maxn]; long long a[maxn]; long long p[maxn]; long long tmax[maxn * 4], tmin[maxn * 4]; void build(long long i, long long l, long long r) { if(l == r) { tmin[i] = p[l]; tmax[i] = p[l]; return; } long long mid = (l + r)/2; build(2*i, l, mid); build(2*i+1, mid+1, r); tmin[i] = min(tmin[2*i], tmin[2*i+1]); tmax[i] = max(tmax[2*i], tmax[2*i+1]); } long long ql, qr; long long query_max(long long i, long long l, long long r) { if(qr < l || ql > r)return -1e17; if(ql <= l && r <= qr)return tmax[i]; long long mid = (l + r)/2; return max(query_max(2*i, l, mid), query_max(2*i+1, mid+1, r)); } long long query_min(long long i, long long l, long long r) { if(qr < l || ql > r)return 1e17; if(ql <= l && r <= qr)return tmin[i]; long long mid = (l + r)/2; return min(query_min(2*i, l, mid), query_min(2*i+1, mid+1, r)); } int suff[maxn]; std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v) { n = c.size(); q = l.size(); std::vector<int> s(n, 0); /// fix l and r for (int i = 1; i <= n; ++ i) r[i] = c[i-1]; for (int i = 1; i <= q; ++ i) { a[i] = v[i-1]; } suff[q+1] = 0; for (int i = q; i >= 0; -- i) { suff[i] = suff[i+1] + a[i]; } p[0] = 0; for (int i = 1; i <= q; ++ i) p[i] = p[i-1] + a[i]; build(1, 0, q); for (int i = 1; i <= n; ++ i) { int lt = 0, rt = q, mid, ans = -1; while(lt <= rt) { mid = (lt + rt)/2; ql = mid; qr = q; int ansmin = query_min(1, 0, q); int ansmax = query_max(1, 0, q); if(ansmax - ansmin >= r[i]) { ans = mid; lt = mid + 1; } else rt = mid - 1; } ans ++; //cout << ans << endl; int val = 0; if(ans != -1) { if(a[ans] > 0)val = r[i]; } val += suff[ans+1]; s[i-1] = val; } return s; }
#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...