# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
853334 | aaronkim00 | 수족관 3 (KOI13_aqua3) | C++17 | 77 ms | 20684 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define all(v) v.begin(),v.end()
const ll MOD = 1000000007;
struct FLOOR{
ll idx, x1, x2, y;
};
vector<int> tree[300010];
ll w[300010];
ll val[300010];
const bool compare(const int x, const int y){
return val[x]>val[y];
}
int dfs(int u){
int curr = u;
for(int v: tree[u]){
int t = dfs(v);
if(val[curr] < val[t]){
curr = t;
}
}
val[curr] += w[u];
return curr;
}
int main(void){
int N, K;
scanf("%d", &N);
int t1, t2;
scanf("%d %d", &t1, &t2);
stack<FLOOR> st;
st.push({0, 0, 0, -1});
ll maxX = 0;
ll minY = 1000000000;
for(int i=1; i<=N/2; i++){
ll x1 = maxX, y = -1, x2 = maxX;
if(i<N/2){
scanf("%lld %lld", &x1, &y);
scanf("%lld %lld", &x2, &y);
minY = min(minY, y);
maxX = x2;
}
while(true){
FLOOR t = st.top();
st.pop();
if(t.y<y){
st.push(t);
st.push({i, x1, x2, y});
break;
}
else if(t.y==y){
st.push(t);
break;
}
else{
if(st.top().y < y){
tree[i].push_back(t.idx);
}
else{
tree[st.top().idx].push_back(t.idx);
}
w[t.idx] = (ll)(t.y-max(st.top().y, y))*(ll)(x1-st.top().x2);
}
}
}
scanf("%lld %d", &t1, &t2);
scanf("%d", &K);
for(int i=1; i<N/2; i++){
//printf("%lld, %lld\n", w[i], (minY+1)*maxX);
if(w[i]==(minY+1)*maxX){
dfs(i);
}
}
/*for(int i=1; i<N/2; i++){
printf("%d: %d %lld %lld\n", i, parent[i], w[i], val[i]);
for(int x: tree[i]){
printf("%d ", x);
}
printf("\n");
}*/
ll result = 0;
vector<int> L;
for(int i=0; i<N/2; i++){
L.push_back(i);
}
sort(all(L), compare);
for(int i=0; i<K; i++){
result += val[L[i]];
}
printf("%lld\n", result-maxX);
}
Compilation message (stderr)
# | 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... |