248262026-02-15 21:45:33999Bináris fa magassága (50 pont)cpp17Elfogadva 50/50128ms1976 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
#define int long long
using namespace std;

vector<int> dp,hossz;

void build(int i, int h, int n){
    if(h==n){
        dp[i]=0;
        return;
    }
    dp[i]=n-h;
    build(i*2,h+1,n);
    build(i*2+1,h+1,n);
}

void query(int i, vector<int>& ut,int indinut, int u, int L){
    //cout<<i<<' ';
    if(i==u){
        dp[i/2]=max(dp[i]+L,dp[i/2]);
        hossz[i]=L;
        return;
    }
    query(i*2+ut[indinut],ut,indinut+1,u,L);
    dp[i]=max({dp[i*2]+hossz[i*2],dp[i*2+1]+hossz[i*2+1]});
    return;
}

signed main() {
    int n,q;cin>>n>>q;
    dp.resize((1<<n)+1);
    hossz.resize((1<<n)+1,1);
    build(1,1,n);
    while(q--){
        int u,L;cin>>u>>L;
        vector<int> ut;
        int temp=u;
        while(temp!=1){
            ut.push_back(temp%2); //0:balra, 1:jobbra
            temp/=2;
        }
        reverse(ut.begin(),ut.end());
        //for(int i : ut)cout<<i<<' ';
        //out<<endl;
        query(1,ut,0,u,L);
        cout<<dp[1]<<endl;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/0111ms1496 KiB
3Elfogadva2/23ms316 KiB
4Elfogadva2/24ms316 KiB
5Elfogadva2/23ms316 KiB
6Elfogadva2/23ms316 KiB
7Elfogadva3/33ms316 KiB
8Elfogadva3/33ms500 KiB
9Elfogadva3/33ms316 KiB
10Elfogadva3/33ms316 KiB
11Elfogadva2/2128ms1460 KiB
12Elfogadva2/2123ms1888 KiB
13Elfogadva2/2128ms1868 KiB
14Elfogadva2/2119ms1592 KiB
15Elfogadva2/2127ms1844 KiB
16Elfogadva2/2115ms1976 KiB
17Elfogadva2/2119ms1844 KiB
18Elfogadva2/2109ms1844 KiB
19Elfogadva2/2118ms1588 KiB
20Elfogadva3/3119ms1844 KiB
21Elfogadva3/3114ms1588 KiB
22Elfogadva3/3111ms1472 KiB
23Elfogadva3/3107ms1492 KiB