답안 #682833

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
682833 2023-01-17T05:37:00 Z sunwukong123 메기 농장 (IOI22_fish) C++17
100 / 100
830 ms 174968 KB
#include "fish.h"
#include <bits/stdc++.h>
#define int long long 
using namespace std;
#define FOR(i,s,e) for(int i = s; i <= (int)e; ++i)
#define DEC(i,s,e) for(int i = s; i >= (int)e; --i)
#define IAMSPEED ios_base::sync_with_stdio(false); cin.tie(0);
#ifdef LOCAL
#define db(x) cerr << #x << "=" << x << "\n"
#define db2(x, y) cerr << #x << "=" << x << " , " << #y << "=" << y << "\n"
#define db3(a,b,c) cerr<<#a<<"="<<a<<","<<#b<<"="<<b<<","<<#c<<"="<<c<<"\n"
#define dbv(v) cerr << #v << ":"; for (auto ite : v) cerr << ite << ' '; cerr <<"\n"
#define dbvp(v) cerr << #v << ":"; for (auto ite : v) cerr << "{"  << ite.f << ',' << ite.s << "} "; cerr << "\n"
#define dba(a,ss,ee) cerr << #a << ":"; FOR(ite,ss,ee) cerr << a[ite] << ' '; cerr << "\n"
#define reach cerr << "LINE: " << __LINE__ << "\n";
#else
#define reach 
#define db(x)
#define db2(x,y)
#define db3(a,b,c)
#define dbv(v)
#define dbvp(v)
#define dba(a,ss,ee)
#endif
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define pb push_back
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define f first 
#define s second
#define g0(x) get<0>(x)
#define g1(x) get<1>(x)
#define g2(x) get<2>(x)
#define g3(x) get<3>(x)
typedef pair <int, int> pi;
typedef tuple<int,int,int> ti3;
typedef tuple<int,int,int,int> ti4;
int rand(int a, int b) { return a + rng() % (b-a+1); }
const int MOD = 1e9 + 7;
const int inf = (int)1e9 + 500;
const long long oo = (long long)1e18 + 500;
template <typename T> bool chmax(T& a, const T b) { return a<b ? a = b, 1 : 0; }
template <typename T> bool chmin(T& a, const T b) { return a>b ? a = b, 1 : 0; }
const int MAXN = 100005;
unordered_map<int,int> dp[MAXN][2]; // dp[i][has this node been added by the left?][height]
map<pi,int> V;
int ans;
vector<int> H[MAXN];
vector<int> P[MAXN];
vector<pi> S[MAXN];
int S1, S3;
vector<pi> S2, S4;

int query1(int h) {
    return S1;
}
 
int query3(int h) {
    return S3;
}
 
int query2(int h){
    int res=prev(upper_bound(all(S2), pi(h,oo)))->s;
    return res;
}
int query4(int h) {
    reach
    int res=lower_bound(all(S4), pi(h,-oo))->s;
    reach
    return res;
}
long long max_weights(int32_t n, int32_t m, vector<int32_t> X, vector<int32_t> Y, vector<int32_t> W) {
    int height = 0;
    FOR(i,0,m-1){
        ++Y[i];
        V[pi(X[i],Y[i])]=W[i];
        chmax(height, (int)Y[i]);
        H[X[i]].pb(Y[i]);
        H[X[i]].pb(Y[i]-1);
    }
    FOR(i,0,n) {
        H[i].pb(0);
        H[i].pb(height);
        sort(all(H[i]));
        H[i].resize(unique(all(H[i])) - H[i].begin());

    }
 
    FOR(i,0,n){
        int t=0;
        S[i].pb({0,0});
        for(auto curh:H[i]) {
            t+=V[pi(i,curh)];

            if(S[i].back().s != t)S[i].pb({curh,t});
        }

    }
    
    FOR(i,0,n-1) {


        
        if(i){
            for(auto h:H[i]) {
                
                chmax(dp[i][0][h], query1(h)); // chmax(dp[i][h][0], dp[i-1][y][1]);
                
                int s1=prev(upper_bound(all(S[i-1]), pi(h,oo)))->s;
                chmax(dp[i][0][h], s1 + query2(h)); //y<=h: chmax(dp[i][h][0], max{dp[i-1][y][0] - ss[i-1][y]} + ss[i-1][h]) 
                
                //chmax(dp[i][h][0], max(dp[i-1][y][0], dp[i-1][y][1]));
                chmax(dp[i][0][h], query3(h)); // chmax(dp[i][h][0], dp[i-1][y][0]);
                int s2=prev(upper_bound(all(S[i]), pi(h,oo)))->s;
                chmax(dp[i][1][h], query4(h) - s2); //y>h: chmax(dp[i][h][1], max(dp[i-1][y][0], dp[i-1][y][1]) + ss[i][y]-ss[i][h]);
                
                chmax(ans, dp[i][0][h]);
                chmax(ans, dp[i][1][h]);
                //chmax(dp[i][h][1], max(dp[i-1][y][0], dp[i-1][y][1]) + cc);
            }
        } 
        {
            
            S1=0;S3=0;
            for(auto y:H[i]) {
                chmax(S1, dp[i][1][y]);
                chmax(S3, dp[i][0][y]);
            }
            
            S2.clear(); S4.clear();
            S2.pb({0,0});
            for(auto y:H[i]) {
                
                int sum = prev(upper_bound(all(S[i]),pi(y,oo)))->s;
                
                int val=dp[i][0][y] - sum;
                if(val > S2.back().s) {
                    S2.pb({y, val});
                }
            }
            
 
            S4.pb({height, 0});
            for(auto it=H[i].rbegin(); it!=H[i].rend(); it++){ 
                int y=*it;
                int sum=prev(upper_bound(all(S[i+1]), pi(y,oo))) -> s;
                int val=max(dp[i][0][y], dp[i][1][y]) + sum;
                if(val > S4.back().s) {
                    S4.pb({y, val});
                }
            }
            reverse(all(S4));
        }
 

    }
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 192 ms 84964 KB Output is correct
2 Correct 233 ms 92700 KB Output is correct
3 Correct 117 ms 71484 KB Output is correct
4 Correct 118 ms 71500 KB Output is correct
5 Correct 615 ms 140348 KB Output is correct
6 Correct 830 ms 174884 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18316 KB Output is correct
2 Correct 337 ms 103544 KB Output is correct
3 Correct 373 ms 113508 KB Output is correct
4 Correct 194 ms 84984 KB Output is correct
5 Correct 229 ms 92688 KB Output is correct
6 Correct 9 ms 18312 KB Output is correct
7 Correct 12 ms 18260 KB Output is correct
8 Correct 10 ms 18260 KB Output is correct
9 Correct 10 ms 18360 KB Output is correct
10 Correct 114 ms 71492 KB Output is correct
11 Correct 118 ms 71516 KB Output is correct
12 Correct 210 ms 86332 KB Output is correct
13 Correct 232 ms 94396 KB Output is correct
14 Correct 234 ms 85044 KB Output is correct
15 Correct 223 ms 92084 KB Output is correct
16 Correct 211 ms 85056 KB Output is correct
17 Correct 223 ms 92004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 113 ms 71500 KB Output is correct
2 Correct 118 ms 71608 KB Output is correct
3 Correct 179 ms 69728 KB Output is correct
4 Correct 150 ms 73864 KB Output is correct
5 Correct 212 ms 77520 KB Output is correct
6 Correct 210 ms 77432 KB Output is correct
7 Correct 209 ms 77488 KB Output is correct
8 Correct 225 ms 77444 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18228 KB Output is correct
2 Correct 9 ms 18324 KB Output is correct
3 Correct 9 ms 18312 KB Output is correct
4 Correct 9 ms 18260 KB Output is correct
5 Correct 10 ms 18284 KB Output is correct
6 Correct 11 ms 18260 KB Output is correct
7 Correct 10 ms 18260 KB Output is correct
8 Correct 10 ms 18232 KB Output is correct
9 Correct 11 ms 18388 KB Output is correct
10 Correct 13 ms 18900 KB Output is correct
11 Correct 12 ms 18468 KB Output is correct
12 Correct 12 ms 18644 KB Output is correct
13 Correct 10 ms 18388 KB Output is correct
14 Correct 11 ms 18644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18228 KB Output is correct
2 Correct 9 ms 18324 KB Output is correct
3 Correct 9 ms 18312 KB Output is correct
4 Correct 9 ms 18260 KB Output is correct
5 Correct 10 ms 18284 KB Output is correct
6 Correct 11 ms 18260 KB Output is correct
7 Correct 10 ms 18260 KB Output is correct
8 Correct 10 ms 18232 KB Output is correct
9 Correct 11 ms 18388 KB Output is correct
10 Correct 13 ms 18900 KB Output is correct
11 Correct 12 ms 18468 KB Output is correct
12 Correct 12 ms 18644 KB Output is correct
13 Correct 10 ms 18388 KB Output is correct
14 Correct 11 ms 18644 KB Output is correct
15 Correct 11 ms 18564 KB Output is correct
16 Correct 12 ms 18900 KB Output is correct
17 Correct 69 ms 29908 KB Output is correct
18 Correct 61 ms 30032 KB Output is correct
19 Correct 57 ms 29000 KB Output is correct
20 Correct 58 ms 29120 KB Output is correct
21 Correct 60 ms 29020 KB Output is correct
22 Correct 112 ms 39660 KB Output is correct
23 Correct 24 ms 21716 KB Output is correct
24 Correct 53 ms 28112 KB Output is correct
25 Correct 11 ms 18728 KB Output is correct
26 Correct 22 ms 21236 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18228 KB Output is correct
2 Correct 9 ms 18324 KB Output is correct
3 Correct 9 ms 18312 KB Output is correct
4 Correct 9 ms 18260 KB Output is correct
5 Correct 10 ms 18284 KB Output is correct
6 Correct 11 ms 18260 KB Output is correct
7 Correct 10 ms 18260 KB Output is correct
8 Correct 10 ms 18232 KB Output is correct
9 Correct 11 ms 18388 KB Output is correct
10 Correct 13 ms 18900 KB Output is correct
11 Correct 12 ms 18468 KB Output is correct
12 Correct 12 ms 18644 KB Output is correct
13 Correct 10 ms 18388 KB Output is correct
14 Correct 11 ms 18644 KB Output is correct
15 Correct 11 ms 18564 KB Output is correct
16 Correct 12 ms 18900 KB Output is correct
17 Correct 69 ms 29908 KB Output is correct
18 Correct 61 ms 30032 KB Output is correct
19 Correct 57 ms 29000 KB Output is correct
20 Correct 58 ms 29120 KB Output is correct
21 Correct 60 ms 29020 KB Output is correct
22 Correct 112 ms 39660 KB Output is correct
23 Correct 24 ms 21716 KB Output is correct
24 Correct 53 ms 28112 KB Output is correct
25 Correct 11 ms 18728 KB Output is correct
26 Correct 22 ms 21236 KB Output is correct
27 Correct 17 ms 20812 KB Output is correct
28 Correct 344 ms 72864 KB Output is correct
29 Correct 515 ms 93428 KB Output is correct
30 Correct 596 ms 123772 KB Output is correct
31 Correct 609 ms 123852 KB Output is correct
32 Correct 439 ms 87292 KB Output is correct
33 Correct 620 ms 124960 KB Output is correct
34 Correct 617 ms 125168 KB Output is correct
35 Correct 206 ms 57704 KB Output is correct
36 Correct 576 ms 119836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 113 ms 71500 KB Output is correct
2 Correct 118 ms 71608 KB Output is correct
3 Correct 179 ms 69728 KB Output is correct
4 Correct 150 ms 73864 KB Output is correct
5 Correct 212 ms 77520 KB Output is correct
6 Correct 210 ms 77432 KB Output is correct
7 Correct 209 ms 77488 KB Output is correct
8 Correct 225 ms 77444 KB Output is correct
9 Correct 298 ms 102620 KB Output is correct
10 Correct 176 ms 59568 KB Output is correct
11 Correct 386 ms 100300 KB Output is correct
12 Correct 10 ms 18316 KB Output is correct
13 Correct 9 ms 18308 KB Output is correct
14 Correct 10 ms 18284 KB Output is correct
15 Correct 10 ms 18232 KB Output is correct
16 Correct 10 ms 18260 KB Output is correct
17 Correct 9 ms 18260 KB Output is correct
18 Correct 118 ms 71568 KB Output is correct
19 Correct 116 ms 71496 KB Output is correct
20 Correct 113 ms 71512 KB Output is correct
21 Correct 112 ms 71444 KB Output is correct
22 Correct 309 ms 103020 KB Output is correct
23 Correct 458 ms 123132 KB Output is correct
24 Correct 475 ms 124752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 192 ms 84964 KB Output is correct
2 Correct 233 ms 92700 KB Output is correct
3 Correct 117 ms 71484 KB Output is correct
4 Correct 118 ms 71500 KB Output is correct
5 Correct 615 ms 140348 KB Output is correct
6 Correct 830 ms 174884 KB Output is correct
7 Correct 9 ms 18316 KB Output is correct
8 Correct 337 ms 103544 KB Output is correct
9 Correct 373 ms 113508 KB Output is correct
10 Correct 194 ms 84984 KB Output is correct
11 Correct 229 ms 92688 KB Output is correct
12 Correct 9 ms 18312 KB Output is correct
13 Correct 12 ms 18260 KB Output is correct
14 Correct 10 ms 18260 KB Output is correct
15 Correct 10 ms 18360 KB Output is correct
16 Correct 114 ms 71492 KB Output is correct
17 Correct 118 ms 71516 KB Output is correct
18 Correct 210 ms 86332 KB Output is correct
19 Correct 232 ms 94396 KB Output is correct
20 Correct 234 ms 85044 KB Output is correct
21 Correct 223 ms 92084 KB Output is correct
22 Correct 211 ms 85056 KB Output is correct
23 Correct 223 ms 92004 KB Output is correct
24 Correct 113 ms 71500 KB Output is correct
25 Correct 118 ms 71608 KB Output is correct
26 Correct 179 ms 69728 KB Output is correct
27 Correct 150 ms 73864 KB Output is correct
28 Correct 212 ms 77520 KB Output is correct
29 Correct 210 ms 77432 KB Output is correct
30 Correct 209 ms 77488 KB Output is correct
31 Correct 225 ms 77444 KB Output is correct
32 Correct 9 ms 18228 KB Output is correct
33 Correct 9 ms 18324 KB Output is correct
34 Correct 9 ms 18312 KB Output is correct
35 Correct 9 ms 18260 KB Output is correct
36 Correct 10 ms 18284 KB Output is correct
37 Correct 11 ms 18260 KB Output is correct
38 Correct 10 ms 18260 KB Output is correct
39 Correct 10 ms 18232 KB Output is correct
40 Correct 11 ms 18388 KB Output is correct
41 Correct 13 ms 18900 KB Output is correct
42 Correct 12 ms 18468 KB Output is correct
43 Correct 12 ms 18644 KB Output is correct
44 Correct 10 ms 18388 KB Output is correct
45 Correct 11 ms 18644 KB Output is correct
46 Correct 11 ms 18564 KB Output is correct
47 Correct 12 ms 18900 KB Output is correct
48 Correct 69 ms 29908 KB Output is correct
49 Correct 61 ms 30032 KB Output is correct
50 Correct 57 ms 29000 KB Output is correct
51 Correct 58 ms 29120 KB Output is correct
52 Correct 60 ms 29020 KB Output is correct
53 Correct 112 ms 39660 KB Output is correct
54 Correct 24 ms 21716 KB Output is correct
55 Correct 53 ms 28112 KB Output is correct
56 Correct 11 ms 18728 KB Output is correct
57 Correct 22 ms 21236 KB Output is correct
58 Correct 17 ms 20812 KB Output is correct
59 Correct 344 ms 72864 KB Output is correct
60 Correct 515 ms 93428 KB Output is correct
61 Correct 596 ms 123772 KB Output is correct
62 Correct 609 ms 123852 KB Output is correct
63 Correct 439 ms 87292 KB Output is correct
64 Correct 620 ms 124960 KB Output is correct
65 Correct 617 ms 125168 KB Output is correct
66 Correct 206 ms 57704 KB Output is correct
67 Correct 576 ms 119836 KB Output is correct
68 Correct 298 ms 102620 KB Output is correct
69 Correct 176 ms 59568 KB Output is correct
70 Correct 386 ms 100300 KB Output is correct
71 Correct 10 ms 18316 KB Output is correct
72 Correct 9 ms 18308 KB Output is correct
73 Correct 10 ms 18284 KB Output is correct
74 Correct 10 ms 18232 KB Output is correct
75 Correct 10 ms 18260 KB Output is correct
76 Correct 9 ms 18260 KB Output is correct
77 Correct 118 ms 71568 KB Output is correct
78 Correct 116 ms 71496 KB Output is correct
79 Correct 113 ms 71512 KB Output is correct
80 Correct 112 ms 71444 KB Output is correct
81 Correct 309 ms 103020 KB Output is correct
82 Correct 458 ms 123132 KB Output is correct
83 Correct 475 ms 124752 KB Output is correct
84 Correct 750 ms 161360 KB Output is correct
85 Correct 700 ms 170960 KB Output is correct
86 Correct 766 ms 168904 KB Output is correct
87 Correct 790 ms 174968 KB Output is correct
88 Correct 10 ms 18312 KB Output is correct
89 Correct 788 ms 174768 KB Output is correct
90 Correct 708 ms 164796 KB Output is correct
91 Correct 585 ms 146228 KB Output is correct