Submission #1084497

# Submission time Handle Problem Language Result Execution time Memory
1084497 2024-09-06T10:34:08 Z _rain_ Discharging (NOI20_discharging) C++14
36 / 100
10 ms 5980 KB
#include<bits/stdc++.h>
using namespace std;
#define ll long long

#define fixbug false

const ll INF = (ll)4e18+7;
const int maxn = 1e5;
ll a[maxn+2] ;
int n;

namespace subtask1{
    bool check(){
        return n <= 1500;
    }
    const int N = 1500;
    ll f[N+2] , sum[N+2] = {};
    void main_code(){
        for (int i = 1; i <= n; ++i) f[i] = INF , sum[i] = INF;
        for (int i = 1; i <= n; ++i){
            ll mx = a[i];
            for (int j = i; j >= 1; --j){
                mx = max(mx , a[j]);
                f[i] = min(f[i] , f[j - 1] + mx * (n - j + 1));
            }
        }
        cout << f[n];
        return;
    }
}

namespace subtask2{
    bool check(){
        return true;
    }
    const int N = 2e5;
    ll f[N+2];
    #define double long double
    struct Line{
        ll a , b;
        Line(ll a , ll b) : a(a) , b(b) {};
        ll F(ll x){
            return a * x + b;
        }
    };
    struct Hull{
        Line X;
        double slope;
    };
    double get_slope(Line a , Line b){
        return (double)(b.b - a.b) / (a.a - b.a);
    }
    vector<Hull> convex;
    void addline(Line x){
        int n = convex.size();
        while (n > 1 && get_slope(convex[n - 2].X , x) <= convex[n-1].slope){
            convex.pop_back();
            --n;
        }
        if (!convex.size()) convex.push_back({x , LLONG_MIN});
            else convex.push_back({x , get_slope(convex[n - 1].X,x)});
        return;
    }
    ll Find(ll x , int t){
        int l = 0 , r = convex.size() - 1 , p = 0;
        while (l<=r){
            int m = l + r >> 1;
            if (convex[m].slope <= x){
                l = m + 1;
                p = m;
            }
            else r = m - 1;
        }
        if (t&&fixbug){
            cout << convex[p].X.a << ' ' << convex[p].X.b << ' ' << p << '\n';
            for (auto& x : convex) cout << x.X.a << ' ' << x.X.b << ' ' << x.slope << '\n';
        }
        return convex[p].X.F(x);
    }
    void add(ll a , ll b){
        addline(Line(a,b));
        return;
    }


    void main_code(){
        for (int i = 1; i <= n; ++i){
            add(-i , f[i-1]);
            f[i] = Find(a[i],i==2) + a[i]*n + a[i];
            int j = i;
            while (j <= n && a[i] >= a[j]){
                ++j;
                f[j] = f[i];
            }
            i = j - 1;
            if (fixbug){
                cout << i << ' ' << f[i] << '\n';
            }
        }
        cout << f[n];
    }

}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    #define name "main"
    if (fopen(name".inp","r")){
        freopen(name".inp","r",stdin);
    }

    cin >> n;
    for (int i = 1; i <= n; ++i) cin >> a[i];

    if (subtask1::check()) {
        subtask1::main_code();
        exit(0);
    }
    subtask2::main_code();
    exit(0);
}

Compilation message

Discharging.cpp: In function 'long long int subtask2::Find(long long int, int)':
Discharging.cpp:67:23: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   67 |             int m = l + r >> 1;
      |                     ~~^~~
Discharging.cpp: In function 'int main()':
Discharging.cpp:110:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 0 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2392 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 0 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2396 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
4 Correct 2 ms 2396 KB Output is correct
5 Correct 2 ms 2396 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 2 ms 2396 KB Output is correct
8 Correct 2 ms 2528 KB Output is correct
9 Correct 3 ms 2392 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 2 ms 2396 KB Output is correct
12 Correct 3 ms 2396 KB Output is correct
13 Correct 2 ms 2392 KB Output is correct
14 Correct 2 ms 2396 KB Output is correct
15 Correct 2 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 2 ms 2396 KB Output is correct
3 Correct 2 ms 2396 KB Output is correct
4 Correct 2 ms 2396 KB Output is correct
5 Correct 2 ms 2396 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 2 ms 2396 KB Output is correct
8 Correct 2 ms 2528 KB Output is correct
9 Correct 3 ms 2392 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 2 ms 2396 KB Output is correct
12 Correct 3 ms 2396 KB Output is correct
13 Correct 2 ms 2392 KB Output is correct
14 Correct 2 ms 2396 KB Output is correct
15 Correct 2 ms 2396 KB Output is correct
16 Runtime error 6 ms 5212 KB Execution killed with signal 11
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 5980 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 0 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2392 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 0 ms 2396 KB Output is correct
15 Correct 2 ms 2396 KB Output is correct
16 Correct 2 ms 2396 KB Output is correct
17 Correct 2 ms 2396 KB Output is correct
18 Correct 2 ms 2396 KB Output is correct
19 Correct 2 ms 2396 KB Output is correct
20 Correct 2 ms 2396 KB Output is correct
21 Correct 2 ms 2396 KB Output is correct
22 Correct 2 ms 2528 KB Output is correct
23 Correct 3 ms 2392 KB Output is correct
24 Correct 2 ms 2396 KB Output is correct
25 Correct 2 ms 2396 KB Output is correct
26 Correct 3 ms 2396 KB Output is correct
27 Correct 2 ms 2392 KB Output is correct
28 Correct 2 ms 2396 KB Output is correct
29 Correct 2 ms 2396 KB Output is correct
30 Correct 2 ms 2460 KB Output is correct
31 Correct 2 ms 2396 KB Output is correct
32 Correct 2 ms 2396 KB Output is correct
33 Correct 2 ms 2520 KB Output is correct
34 Correct 2 ms 2524 KB Output is correct
35 Correct 2 ms 2396 KB Output is correct
36 Correct 2 ms 2396 KB Output is correct
37 Correct 3 ms 2396 KB Output is correct
38 Correct 2 ms 2520 KB Output is correct
39 Correct 2 ms 2396 KB Output is correct
40 Correct 2 ms 2396 KB Output is correct
41 Correct 2 ms 2396 KB Output is correct
42 Correct 2 ms 2396 KB Output is correct
43 Correct 2 ms 2396 KB Output is correct
44 Correct 2 ms 2396 KB Output is correct
45 Correct 2 ms 2396 KB Output is correct
46 Correct 2 ms 2396 KB Output is correct
47 Correct 3 ms 2396 KB Output is correct
48 Correct 2 ms 2396 KB Output is correct
49 Correct 1 ms 2400 KB Output is correct
50 Correct 2 ms 2532 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 0 ms 2396 KB Output is correct
3 Correct 0 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 0 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2392 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 0 ms 2396 KB Output is correct
15 Correct 2 ms 2396 KB Output is correct
16 Correct 2 ms 2396 KB Output is correct
17 Correct 2 ms 2396 KB Output is correct
18 Correct 2 ms 2396 KB Output is correct
19 Correct 2 ms 2396 KB Output is correct
20 Correct 2 ms 2396 KB Output is correct
21 Correct 2 ms 2396 KB Output is correct
22 Correct 2 ms 2528 KB Output is correct
23 Correct 3 ms 2392 KB Output is correct
24 Correct 2 ms 2396 KB Output is correct
25 Correct 2 ms 2396 KB Output is correct
26 Correct 3 ms 2396 KB Output is correct
27 Correct 2 ms 2392 KB Output is correct
28 Correct 2 ms 2396 KB Output is correct
29 Correct 2 ms 2396 KB Output is correct
30 Runtime error 6 ms 5212 KB Execution killed with signal 11
31 Halted 0 ms 0 KB -