답안 #598382

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
598382 2022-07-18T08:18:05 Z AGE Transport (COCI19_transport) C++14
52 / 130
770 ms 28172 KB
#include<bits/stdc++.h>
#define F first
#define S second
#define int long long
#define pb push_back

using namespace std;
const int N=2e5+10,M=2e3,mod=1e9+7;
int cost[N],seg[N*4],ans[N];
map<pair<int,int>,int>mp;

void build(int v,int tl,int tr){

    if(tl==tr){
        seg[v]=ans[tl];
        return ;
    }

    int tm=(tl+tr)/2;

    build(v*2,tl,tm);
    build(v*2+1,tm+1,tr);

    seg[v]=min(seg[v*2],seg[v*2+1]);

}

int get(int v,int tl,int tr,int l,int r){

    if(tl>r||tr<l){
        return 1e18;
    }

    if(tl>=l&&tr<=r)
        return seg[v];

    int tm=(tl+tr)/2;

    return min(get(v*2,tl,tm,l,r),get(v*2+1,tm+1,tr,l,r));

}

int n;
bool ok(int mid,int val,int start){

    if(start+mid-1>n)
        return 0;

    int ans1=get(1,1,n,start,start+mid-1);
    return ans1>=val;

}

main()
{

    cin>>n;

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

    for(int i=0;i<n-1;i++){
        int x,y,z;
        cin>>x>>y>>z;
        mp[{x,y}]=z;
        mp[{y,x}]=z;
    }

    ans[0]=0;

    for(int i=1;i<=n;i++){
        ans[i+1]=ans[i]+cost[i]-mp[{i,i+1}];
    }

    build(1,1,n);
    int anss=0;

    for(int i=1;i<=n;i++){

        int val=ans[i];
        int l=0,r=n+1;

        while(l<r){

            int mid=(l+r+1)/2;
            if(ok(mid,val,i))
                l=mid;
            else
                r=mid-1;

        }

        anss+=l-1;

    }

    reverse(cost+1,cost+n+1);

    ans[0]=0;

    for(int i=1;i<=n;i++){
        ans[i+1]=ans[i]+cost[i]-mp[{n-i+1,n-i}];
    }

    build(1,1,n);

    for(int i=1;i<=n;i++){

        int val=ans[i];
        int l=0,r=n+1;

        while(l<r){

            int mid=(l+r+1)/2;
            if(ok(mid,val,i))
                l=mid;
            else
                r=mid-1;

        }

        anss+=l-1;

    }

    cout<<anss<<endl;


    return 0;
}

Compilation message

transport.cpp:54:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   54 | main()
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 1108 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 852 KB Output is correct
2 Correct 23 ms 1280 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 246 ms 7404 KB Output is correct
2 Correct 240 ms 7860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 379 ms 9732 KB Output is correct
2 Correct 480 ms 13388 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 554 ms 13744 KB Output is correct
2 Correct 770 ms 18984 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 131 ms 7964 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 239 ms 13260 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 412 ms 17356 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 466 ms 23176 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 634 ms 28172 KB Output isn't correct
2 Halted 0 ms 0 KB -