Submission #1298566

#TimeUsernameProblemLanguageResultExecution timeMemory
1298566hssaan_arifVinjete (COI22_vinjete)C++20
24 / 100
3090 ms16360 KiB
#include <bits/stdc++.h>
using namespace std;

#define endl "\n"
#define pb push_back
#define int long long
#define fi first
#define se second

const int N = 3e5 + 5, M = 1e9 + 7, LG = 20;

int n , A[N] , fen[N] , cnt[N] , u , v,  l , r , m , val , ANS[N];
vector<vector<int>> lis[N];
map<int,int> cn;
set<vector<int>> rg;

// void add(int i , int x){
//     while(i <= n){
//         cnt[i]+=x;
//         fen[i]+=x;
//         i += (i&(-i));
//     }
// }

// int prep(int i){
//     int su = 0 , re = 0;
//     while (i > 0){
//         su += fen[i];
//         re += cnt[i];
//         i -= (i&(-i));
//     }
//     return su;
// }

void dfs(int v , int p){
    for (auto u : lis[v]){
        if (u[0] == p) continue;
        rg.insert({u[1],u[2],u[0],v});
        val = 0;
        int l1 = 0 , r1 = 0;
        for (auto i : rg){
            if (l1 == 0){
                val += (i[1]-i[0]+1);
                l1 = i[0];
                r1 = i[1];
                continue;
            }
            if (r1 < i[0]){
                val += (i[1]-i[0]+1);
                l1 = i[0];
                r1 = i[1];
            }else{
                val += (max(i[1],r1) - r1);
                r1 = max(i[1],r1);
            }
        }
        ANS[u[0]] = val;
        dfs(u[0] , v);
        rg.erase({u[1],u[2],u[0],v});
    }
}

void solve(){
    cin >> n >> m;
    for (int i=1 ; i<=n ; i++){
        cin >> u >> v >> l >> r;
        lis[u].pb({v,l,r});
        lis[v].pb({u,l,r});
    }
    dfs(1 , 1);
    for (int i=2 ; i<=n ; i++){
        cout << ANS[i] << endl;
    }
}

signed main(){
    for (int i=1 ; i<N ; i++){
        int j = i;
        while(j < N){
            fen[j] += 1;
            cnt[j] -= 1;
            j += (j&(-j));
        }
    }
    // freopen("" , "r" , stdin);
    // freopen("" , "w" , stdout);
    // cout << setprecision(30);
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int ts = 1;
    // cin >> ts;
    while(ts--){
        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...