답안 #64270

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
64270 2018-08-03T20:23:55 Z reality Bulldozer (JOI17_bulldozer) C++17
컴파일 오류
0 ms 0 KB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define ll long long
#define dbg(v) cerr<<#v<<" = "<<v<<'\n'
#define vi vector<int>
#define vl vector <ll>
#define pii pair<int,int>
#define mp make_pair
#define db long double
#define pb push_back
#define all(s) s.begin(),s.end()
template < class T > ostream& operator<<(ostream& stream, const vector<T> v){ stream << "[ "; for (int i=0; i<(int)v.size(); i++) stream << v[i] << " "; stream << "]"; return stream;}
template < class T > T smin(T &a,T b) {if (a > b) a = b;return a;}
template < class T > T smax(T &a,T b) {if (a < b) a = b;return a;}
struct fr {
    ll fi,se;
    fr(void) {
        fi = se = 0;
    }
    fr(ll aa,ll bb) {
        if (aa < 0 || (!aa && bb < 0))
            aa *= -1,bb *= -1;
        fi = aa;
        se = bb;
    }
};
bool operator == (fr a,fr b) {
    return a.fi * b.se == a.se * b.fi;
}
bool operator < (fr a,fr b) {
    return a.fi * b.se < a.se * b.fi;
}
bool operator != (fr a,fr b) {
    return !(a == b);
}
struct st {
    ll ss,ls,rs,as;
    st(void) {
        ss = ls = rs = as;
    }
    st(ll x) {
        ss = x;
        ls = rs = as = max(0ll,x);
    }
};
st operator + (st a,st b) {
    st c;
    c.ss = a.ss + b.ss;
    c.ls = max(a.ls,a.ss + b.ls);
    c.rs = max(b.rs,b.ss + a.rs);
    c.as = max({a.as,b.as,a.rs + b.ls});
    return c;
}
st t[4096];
void update(int l,int r,int pos,ll v,int node) {
    if (l == r)
        t[node] = st(v);
    else {
        int m = (l + r) / 2;
        if (pos <= m)
            update(l,m,pos,v,node * 2);
        else
            update(m+1,r,pos,v,node * 2 + 1);
        t[node] = t[node * 2] + t[node * 2 + 1];
    }
}
int main(void) {
    int n;
    cin>>n;
    vector < pair < pii , ll > > p(n);
    for (auto & it : p)
        cin>>it.fi.fi>>it.fi.se>>it.se;
    sort(all(p));
    vector < pair < fr , pii > > sw;
    for (int i = 0;i < n;++i)
        for (int j = i + 1;j < n;++j)
            sw.pb(mp(fr(p[i].fi.fi - p[j].fi.fi,p[i].fi.se - p[j].fi.se),mp(i,j)));
    vi q(n);
    for (int i = 0;i < n;++i)
        q[i] = i,update(0,n - 1,i,p[i].se,1);
    sort(all(sw),[&](auto a,auto b) {
            if (a.fi != b.fi)
                return a.fi < b.fi;
            return a.se < b.se;
        });
    int sz = sw.size();
    ll answer = t[1];
    for (int i = 0,j = 0;i < sz;i = j) {
        while (j < sz && sw[i].fi == sw[j].fi) {
            int pi = sw[j].se.fi;
            int pj = sw[j].se.se;
            swap(q[pi],q[pj]);
            update(0,n - 1,q[pi],p[pi].se,1);
            update(0,n - 1,q[pj],p[pj].se,1);
            ++j;
        }
        smax(answer,t[1].as);
    }
    cout << answer << '\n';
    return 0;
}

Compilation message

bulldozer.cpp: In function 'int main()':
bulldozer.cpp:89:20: error: cannot convert 'st' to 'long long int' in initialization
     ll answer = t[1];
                    ^