답안 #598381

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
598381 2022-07-18T08:16:52 Z AGE Transport (COCI19_transport) C++14
0 / 130
621 ms 22216 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[{i,i+1}];
    }

    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 13 ms 980 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 944 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 241 ms 7384 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 381 ms 9796 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 527 ms 13656 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 133 ms 6176 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 228 ms 10476 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 337 ms 13640 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 462 ms 18276 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 621 ms 22216 KB Output isn't correct
2 Halted 0 ms 0 KB -