Submission #1367999

#TimeUsernameProblemLanguageResultExecution timeMemory
1367999AlmontherNile (IOI24_nile)C++20
32 / 100
61 ms16808 KiB
#include<bits/stdc++.h>

using namespace std;

#define ll long long
const int maxn=1e5+5;
ll par[maxn],no[maxn];
// ll sol(vector<array<ll,3>>arr,ll d){
//     ll ans=1e18,sum=0,n=arr.size();
//     for(auto i:arr) sum+=i[2];
//     if(n%2==0) return sum;
//     for(int i=0;i<arr.size();i++) if(i%2==0||arr[i+1][0]-arr[i-1][0]<=d) ans=min(ans,sum+arr[i][1]-arr[i][2]);
//     return ans;
// }
ll dsu(ll x){
    if(x==par[x]) return x;
    return par[x]=dsu(par[x]);
}
std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A,std::vector<int> B, std::vector<int> E){
    ll n=W.size();
    vector<ll>anss(E.size());
    array<ll,3>arr[n+5];
    ll ans=0;
    for(int i=0;i<n;i++) arr[i]={W[i],A[i],B[i]},par[i]=i,no[i]=1,ans+=2;
    sort(arr,arr+n);
    set<pair<ll,ll>>diff;
    for(int i=1;i<n;i++) diff.insert({arr[i][0]-arr[i-1][0],i});
    vector<pair<ll,ll>>ds;
    for(int i=0;i<E.size();i++) ds.push_back({E[i],i});
    sort(ds.begin(),ds.end());
    for(auto [d,idd]:ds){
        while(diff.size()&&diff.begin()->first<=d){
            ll x=diff.begin()->second;
            diff.erase(diff.begin());
            ll a=dsu(x),b=dsu(x-1);
            ans-=no[a]+no[a]%2;
            ans-=no[b]+no[b]%2;
            no[a]+=no[b];
            par[b]=a;
            ans+=no[a]+no[a]%2;
        }
        anss[idd]=ans;
    }
    return anss;
}
// int main(){
//     calculate_costs({15, 12, 2, 10, 21},
//                 {5, 4, 5, 6, 3},
//                 {1, 2, 2, 3, 2},
//                 {5, 9, 1})
// }
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...