제출 #868683

#제출 시각아이디문제언어결과실행 시간메모리
868683jack1eno_1_2401Building Bridges (CEOI17_building)C++14
100 / 100
50 ms73592 KiB
#include<bits/stdc++.h>

////Ta thuat
//#pragma GCC optimize("O2")
//#pragma GCC target("avx,avx2,fma")

#define MOD 1000000007
#define fi first
#define se second
#define int long long
#define ii pair<int,int>
#define Dennis "Top1Server"
#define Jack1e "DB bainao"
#define heap_max(a) priority_queue<a>
#define heap_min(a) priority_queue<a, vector<a>, greater <a>>
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define el cout << '\n'
#define rep(i, n) for(int i = 0; i < (n); i++)
#define For(i, a, b) for(int i = (a); i <= (b); i++)
#define Fod(i, a, b) for(int i = (a); i >= (b); i--)
#define bit(x, i) ((x >> i) & 1)

using namespace std;
template <class X, class Y> bool minimize(X &a, Y b){
    if (a > b) return a = b, true;
    return false;
}
template <class X, class Y> bool maximize(X &a, Y b){
    if (a < b) return a = b, true;
    return false;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l, int r) {return l + rng() % (r - l + 1);}
const int N = 1e6;

struct line{
    int a, b;
    line(){
        a = 0;
        b = 1e18;
    }
    line(int aa, int bb){
        a = aa;
        b = bb;
    }
    int eval(int x){
        return a*x + b;
    }
};

int mx;
line sg[4*N];
void update(int id, int l, int r, line myLine){
    if(l == r){
        if(sg[id].eval(l) > myLine.eval(l)){
            sg[id] = myLine;
        }
        return;
    }
    int m = (l + r) / 2;

    if(sg[id].a > myLine.a) swap(sg[id], myLine);
    if(sg[id].eval(m) > myLine.eval(m)){
        swap(sg[id], myLine);
        update(id*2+1, m+1, r, myLine);
    }else{
        update(id*2, l, m, myLine);
    }
}

int get(int id, int l, int r, int x){
    if(l == r){
        return sg[id].eval(x);
    }
    int m = (l + r) / 2;
    if(x <= m){
        return min(sg[id].eval(x), get(id*2, l, m, x));
    }else{
        return min(sg[id].eval(x), get(id*2+1, m+1, r, x));
    }
}

int dp[N], sum[N];
int n, h[N], w[N];

void solve(){
    cin >> n;
    For(i,1,n) cin >> h[i];
    For(i,1,n){
        cin >> w[i];
        sum[i] = sum[i-1] + w[i];
    }

    update(1, 1, N,
        line(-2*h[1], dp[1] + h[1]*h[1] - sum[1]));
    For(i,2,n){
        int c = h[i]*h[i] + sum[i-1];
        int tmp = get(1, 1, N, h[i]);
        dp[i] = tmp + c;

        update(1, 1, N, 
            line(-2*h[i], dp[i] + h[i]*h[i] - sum[i]));
    }
    cout << dp[n];
}

main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #define TASK "BRIDGEPOL"
    if(fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }
    int T = 1;
    //cin >> T;
    while(T--){
        solve();
    }
    return 0;
}

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

building.cpp:109:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  109 | main(){
      | ^~~~
building.cpp: In function 'int main()':
building.cpp:113:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  113 |         freopen(TASK".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
building.cpp:114:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  114 |         freopen(TASK".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...