제출 #97186

#제출 시각아이디문제언어결과실행 시간메모리
97186KastandaSchools (IZhO13_school)C++11
70 / 100
1892 ms7012 KiB
#include<bits/stdc++.h> #define lc (id << 1) #define rc (id << 1 ^ 1) #define md ((l + r) >> 1) using namespace std; typedef long long ll; template < int MXN > struct SegTree { int C[MXN * 4]; ll S[MXN * 4]; void Add(int i, int val, int id = 1, int l = 0, int r = MXN) { if (r - l < 2) { S[id] += 1LL * val * l; C[id] += val; return ; } if (i < md) Add(i, val, lc, l, md); else Add(i, val, rc, md, r); C[id] = C[lc] + C[rc]; S[id] = S[lc] + S[rc]; } ll _Get(int &k, int id = 1, int l = 0, int r = MXN) { if (!k) return 0LL; if (C[id] <= k) return k -= C[id], S[id]; return (_Get(k, rc, md, r) + _Get(k, lc, l, md)); } ll Get(int k) { int tmp = k; return (_Get(tmp)); } }; const int N = 300005, MXN = 100005; int n, R, M; pair < int , int > A[N]; int main() { scanf("%d%d%d", &n, &R, &M); for (int i = 0; i < n; i++) scanf("%d%d", &A[i].first, &A[i].second); sort(A, A + n); reverse(A, A + n); SegTree < MXN * 2 > P, S; for (int i = 0; i < n; i++) S.Add(A[i].second, 1); ll Mx = 0, sum = 0; for (int i = 0; i < R + M; i++) { sum += A[i].first; S.Add(A[i].second, -1); P.Add(A[i].second - A[i].first + MXN, 1); if (i >= R - 1) Mx = max(Mx, sum + P.Get(i + 1 - R) - (ll)(i + 1 - R) * MXN + S.Get(M - (i + 1 - R))); } return !printf("%lld\n", Mx); }

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

school.cpp: In function 'int main()':
school.cpp:44:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d%d", &n, &R, &M);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
school.cpp:46:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &A[i].first, &A[i].second);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...