이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pp;
typedef pair<ll,ll> pll;
void read(int& x){ scanf("%d",&x); }
void read(ll& x){ scanf("%lld",&x); }
void read(pp& x){ scanf("%d%d",&x.first, &x.second); }
void read(pll& x){ scanf("%lld%lld",&x.first, &x.second); }
template<typename T,typename... Args>
void read(T& a,Args&... b){ read(a); read(b...); }
void cppio(){ ios_base::sync_with_stdio(0); cin.tie(0); }
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define eb emplace_back
#define x first
#define y second
#define rep(i,n) for(int i = 0; i < (n); ++i)
#define rrep(i,n) for(int i = 1; i <= (n); ++i)
#define sz(x) (int)(x).size()
const int inf = int(1e9) + 10;
struct tree {
const static int M = 524288;
pp t[M<<1];
void init() {
fill(t, t+(2*M), pp(-inf, -1));
}
pp rmax(int l, int r) {
pp ret(-inf, -1);
for(l+=M, r+=M; l<=r; l/=2, r/=2) {
if(l%2==1) ret=max(ret, t[l++]);
if(r%2==0) ret=max(ret, t[r--]);
}
return ret;
}
void put(int p, pp v) {
for(p+=M; p; p /= 2) {
t[p] = max(t[p], v);
}
}
void reset(int p) {
p += M;
t[p] = pp(-inf, -1);
for(p/=2; p; p/=2) {
t[p] = max(t[p*2], t[p*2+1]);
}
}
} T;
int n, m;
const int maxn = int(5e5) + 10;
pp room[maxn];
pp req[maxn];
int main()
{
int o;
cppio(); cin >> n >> m >> o;
rrep(i, n) { cin >> room[i].x >> room[i].y; }
rrep(i, m) { cin >> req[i].y >> req[i].x; }
sort(room+1, room+n+1);
sort(req+1, req+m+1);
rrep(i, m) T.put(i, pp(req[i].y, i));
ll ans = 0;
int match = 0;
for(int i=1; match<=o && i<=n; ++i) {
int to = lower_bound(req+1, req+m+1, pp(room[i].y+1, -1)) - req;
pp m = T.rmax(1, to-1);
if(m.y == -1) continue;
int df = m.x - room[i].x;
if(df < 0) continue;
if(0) printf("For room (cost=%d, size=%d), we choose request (minsize=%d, gain=%d)\n",
room[i].x, room[i].y, req[m.y].x, req[m.y].y);
ans += df;
++match;
T.reset(m.y);
}
cout << ans << endl;
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
hot.cpp: In function 'void read(int&)':
hot.cpp:6:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
void read(int& x){ scanf("%d",&x); }
~~~~~^~~~~~~~~
hot.cpp: In function 'void read(ll&)':
hot.cpp:7:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
void read(ll& x){ scanf("%lld",&x); }
~~~~~^~~~~~~~~~~
hot.cpp: In function 'void read(pp&)':
hot.cpp:8:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
void read(pp& x){ scanf("%d%d",&x.first, &x.second); }
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
hot.cpp: In function 'void read(pll&)':
hot.cpp:9:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
void read(pll& x){ scanf("%lld%lld",&x.first, &x.second); }
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |