Submission #1364399

#TimeUsernameProblemLanguageResultExecution timeMemory
1364399yyc000123Tourists (EGOI22_tourists)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int N = 2e5+5 ;
const int M = 2e5+5 ;
const int Q = 2e5+5 ;
int n , m , q , arr[M] , deep[N] , anc[N][(int)log2(N)+5] , seg[4*M] ;
ll opi[4*M] ;
vector<int> nei[N] ;

void dfs(int node){
    for(int i:nei[node]){
        if(i==anc[node][0]) continue ;
        deep[i] = deep[node]+1 ; anc[i][0] = node ; dfs(i) ;
    }
}

int flca(int a , int b){
    if(deep[a]<deep[b]) swap(a,b) ;
    int diff = deep[a]-deep[b] ;
    for(int i=0 ; i<=log2(n)+1 ; i++){
        if((diff>>i)&1) a = anc[a][i] ;
    }
    if(a==b) return a ;
    for(int i=log2(n)+1 ; i>=0 ; i--){
        if(anc[a][i]!=anc[b][i]) a = anc[a][i] , b = anc[b][i] ;
    }
    return anc[a][0] ;
}

int fdis(int a , int b){
    int lca = flca(a,b) ;
    return deep[a]+deep[b]-2*deep[lca] ;
}

void build(int le , int ri , int v , int pos){
    if(pos<le || ri<pos) return ;
    else if(le==ri){ seg[v] = arr[pos] ; return ; }
    int mi = (le+ri)/2 ;
    build(le,mi,v<<1,pos) ; build(mi+1,ri,(v<<1)|1,pos) ;
    if(seg[v<<1]==seg[(v<<1)|1]) seg[v] = seg[v<<1] ;
}

void f(int le , int ri , int v , int l , int r , int x){
    if(seg[v/2]!=-1) seg[v] = seg[v/2] ;
    if(r<le || ri<l) return ;
    else if(l<=le && ri<=r && seg[v]!=-1){ opi[v] -= fdis(seg[v],x) ; seg[v] = x ; return ; }
    int mi = (le+ri)/2 ;
    f(le,mi,v<<1,l,r,x) ; f(mi+1,ri,(v<<1)|1,l,r,x) ;
    if(seg[v<<1]==seg[(v<<1)|1]) seg[v] = seg[v<<1] ;
    else seg[v] = -1 ;
}

ll g(int le , int ri , int v , int target){
    if(target<le || ri<target) return 0 ;
    else if(le==ri) return opi[v] ;
    int mi = (le+ri)/2 ;
    return opi[v] + g(le,mi,v<<1,target) + g(mi+1,ri,(v<<1)|1,target) ;
}

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n >> m >> q ;
    for(int i=1 ; i<=m ; i++) cin >> arr[i] ;
    for(int i=1 ; i<n ; i++){
        int a , b ; cin >> a >> b ;
        nei[a].push_back(b) ; nei[b].push_back(a) ;
    }
    dfs(1) ;
    for(int j=1 ; j<=log2(n)+1 ; j++){
        for(int i=1 ; i<=n ; i++) anc[i][j]=anc[anc[i][j-1]][j-1] ;
    }
    memset(seg,-1,sizeof(seg)) ;
    for(int i=1 ; i<=m ; i++) build(1,m,1,i) ;
    while(q--){
        char ch ; cin >> ch ;
        if(ch=='t'){
            int l , r , c ; cin >> l >> r >> c ;
           f(1,m,1,i,i,c) ;
        }
        else if(ch=='e'){
            int c , d ; cin >> c >> d ;
            ;
        }
        else{
            int v ; cin >> v ;
            cout << g(1,m,1,v) << '\n' ;
        }
    }
    return 0 ;
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:79:20: error: 'i' was not declared in this scope
   79 |            f(1,m,1,i,i,c) ;
      |                    ^