제출 #1205850

#제출 시각아이디문제언어결과실행 시간메모리
1205850buet_aluchashiColouring a rectangle (eJOI19_colouring)C++20
20 / 100
50 ms6472 KiB
#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
#define INF 1e15
#define N 500005

using namespace std;


struct segtree
{
    vector<pll> arr;

    segtree(ll n):arr(4*n,make_pair((ll)-INF,0ll))
    {
        ;
    }

    pll query(ll pos,ll lt,ll rt,ll a,ll b)
    {
        if(b<lt || a>rt || b<a || rt<lt)
            return make_pair((ll)-INF,0ll);
        if(a<=lt && rt<=b)
            return arr[pos];
        ll mid=(lt+rt)>>1;
        ll temp=pos<<1;
        return max(query(temp,lt,mid,a,b),query(temp|1,mid+1,rt,a,b));
    }

    void update(ll pos,ll lt,ll rt,ll a,ll val)
    {
        if(a<lt || a>rt || rt<lt)
            return;
        if(lt==rt)
        {
            arr[pos]={val,lt};
            return;
        }
        ll mid=(lt+rt)>>1;
        ll temp=pos<<1;
        update(temp,lt,mid,a,val),update(temp|1,mid+1,rt,a,val);
        arr[pos]=max(arr[temp],arr[temp|1]);
    }

};

// int dp[105][105][105];

void solve()
{
    ll n,m;
    cin>>n>>m;
    ll sz=2*max(n,m)-1;
    vector<ll> a(sz),b(sz);
    // ll temp=m>n?sz-(m+n-1):0;
    for(ll i=0;i<(m+n-1);i++)
        cin>>a[i];
    reverse(a.begin(),a.begin()+m+n-1);
    // temp=m<n?sz-(m+n-1):0;
    for(ll i=0;i<(m+n-1);i++)
        cin>>b[i];
    
    ll sum=0;
    for(ll i=0;i<sz;i++)
        sum+=a[i];
    ll mx=sum;
    ll trc[2]={0};
    ll mn[2]={0}; 
    for(ll i=0;i<max(n,m);i++)
    {
        trc[i&1]+=a[i];
        if(sz-i-1!=i)trc[i&1]+=a[sz-1-i];
        ll j=max(n,m)-1-i;
        trc[i&1]-=b[j];
        if(sz-1-j!=j)trc[i&1]-=b[sz-1-j];
        // cout<<temp<<" ";
        mn[i&1]=max(mn[i&1],trc[i&1]);
    }
    mx=min(mx,sum-mn[0]-mn[1]);
    sum=0;
    swap(a,b);
    trc[0]=trc[1]=mn[0]=mn[1]=0;
    for(ll i=0;i<sz;i++)
        sum+=a[i];
    // mx=min(mx,sum);
   for(ll i=0;i<max(n,m);i++)
    {
        trc[i&1]+=a[i];
        if(sz-i-1!=i)trc[i&1]+=a[sz-1-i];
        ll j=max(n,m)-1-i;
        trc[i&1]-=b[j];
        if(sz-1-j!=j)trc[i&1]-=b[sz-1-j];
        // cout<<temp<<" ";
        mn[i&1]=max(mn[i&1],trc[i&1]);
    }
    mx=min(mx,sum-mn[0]-mn[1]);
    cout<<mx<<"\n";

}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    // cin >> t;
    for(int i = 1; i <= t; ++i){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...