Submission #1247595

#TimeUsernameProblemLanguageResultExecution timeMemory
1247595leinad2Sightseeing in Kyoto (JOI22_kyoto)C++20
100 / 100
21 ms10488 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, i, j, k, a, b, A[500010], B[500010];
long double ans;
vector<int>V1, V2;
vector<long double>f(vector<int>V)
{
    vector<pair<int, int> >hull;
    for(auto p:V)
    {
        int x=p, h=1;
        while(hull.size())
        {
            if(x*hull.back().second<=h*hull.back().first)
            {
                x+=hull.back().first;
                h+=hull.back().second;
                hull.pop_back();
            }
            else break;
        }
        hull.push_back({x, h});
    }
    vector<long double>ans;
    for(auto p:hull)
    {
        for(int i=0;i<p.second;i++)ans.push_back((long double)(p.first)/p.second);
    }
    return ans;
}
main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>m;n--;m--;
    for(i=0;i<=n;i++)cin>>A[i];
    for(i=0;i<=m;i++)cin>>B[i];
    ans=A[n]*m+B[0]*n;
    for(i=n-1;i>=0;i--)V1.push_back(A[i]-A[i+1]);
    for(i=0;i<m;i++)V2.push_back(B[i+1]-B[i]);
    vector<long double>R=f(V1), C=f(V2);
    //cout<<ans<<endl;for(auto p:R)cout<<p<<" ";cout<<endl;for(auto p:C)cout<<p<<" ";cout<<endl;
    long double sum=0;
    int pt=0;
    for(i=(int)C.size()-1;i>=0;i--)
    {
        while(pt<R.size()&&R[pt]+C[i]<0)
        {
            sum+=R[pt];
            pt++;
        }
        ans+=(C[i]*pt+sum);
    }
    int x=round(ans);
    cout<<x;
}

Compilation message (stderr)

kyoto.cpp:32:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   32 | main()
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...