제출 #106604

#제출 시각아이디문제언어결과실행 시간메모리
106604Alexa2001Two Dishes (JOI19_dishes)C++17
10 / 100
10083 ms52884 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int Nmax = 1e6 + 5; struct restrictie { int x, y, add; }; vector<restrictie> R[Nmax]; int n, m; namespace rd { const int bsize = 1<<16; char buffer[bsize+2]; int cursor; static void refresh() { fread(buffer, 1, bsize, stdin), cursor = 0; } template <typename T> static void read(T &x) { x = 0; bool sgn = 0; while(!isdigit(buffer[cursor])) { sgn |= (buffer[cursor] == '-'); ++cursor; if(cursor == bsize) refresh(); } while(isdigit(buffer[cursor])) { x = x * 10 + buffer[cursor] - '0'; ++cursor; if(cursor == bsize) refresh(); } if(sgn) x *= (-1); } } void read_and_init() { rd :: refresh(); rd :: read(n); rd :: read(m); int i; vector<ll> A(n+1), B(m+1), S(n+1), T(m+1); vector<int> P(n+1), Q(m+1), T1(n+1), T2(m+1); for(i=1; i<=n; ++i) rd :: read(A[i]), rd :: read(S[i]), rd :: read(P[i]); for(i=1; i<=m; ++i) rd :: read(B[i]), rd :: read(T[i]), rd :: read(Q[i]); for(i=1; i<=n; ++i) A[i] += A[i-1]; for(i=1; i<=m; ++i) B[i] += B[i-1]; for(i=1; i<=n; ++i) T1[i] = upper_bound(B.begin(), B.end(), S[i] - A[i]) - B.begin() - 1; for(i=1; i<=m; ++i) T2[i] = upper_bound(A.begin(), A.end(), T[i] - B[i]) - A.begin() - 1; for(i=1; i<=n; ++i) R[i].push_back({ 0, T1[i], P[i] }); for(i=1; i<=m; ++i) R[T2[i]+1].push_back({ i, m, Q[i] }); } class SegTree { ll a[Nmax]; public: void maximize() { int i; for(i=1; i<=m; ++i) a[i] = max(a[i], a[i-1]); } void update(vector<restrictie> &v) { for(auto it : v) for(int i=it.x; i<=it.y; ++i) a[i] += it.add; } void init() { memset(a, 0, sizeof(a)); } ll query() { maximize(); return a[m]; } } aint; void solve() { aint.init(); int i; for(i=1; i<=n; ++i) { aint.maximize(); aint.update(R[i]); } ll ans = aint.query(); for(auto it : R[n+1]) ans += it.add; cout << ans << '\n'; } int main() { // freopen("input", "r", stdin); read_and_init(); solve(); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

dishes.cpp: In function 'void rd::refresh()':
dishes.cpp:26:39: warning: ignoring return value of 'size_t fread(void*, size_t, size_t, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         fread(buffer, 1, bsize, stdin), cursor = 0;
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
#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...