QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 256 MB Puntuación total: 100

#971. Arbre binaire de recherche

Estadísticas

Ce problème porte sur les arbres binaires de recherche (BST), une structure de données fondamentale. Cette structure est un arbre binaire enraciné qui stocke des valeurs dans ses nœuds. Si un nœud $x$ contient une valeur $a$, toutes les valeurs dans le sous-arbre gauche de $x$ sont inférieures à $a$, et toutes les valeurs dans le sous-arbre droit de $x$ sont supérieures à $a$.

Afin d'unifier les détails, nous fournissons une implémentation de la recherche d'une valeur $a$ dans un BST enraciné au nœud $x$ :

void find(x, a) {
    if (x == 0 || w[x] == a) return;
    if (w[x] > a) find(l[x], a);
    else find(r[x], a);
}

Ici, $l[x]$ est l'enfant gauche de $x$, $r[x]$ est l'enfant droit de $x$, et $w[x]$ est la valeur de $x$. Plus précisément, si $x$ n'a pas d'enfant gauche (ou droit), $l[x]$ (ou $r[x]$) vaut 0.

Nous définissons $A(root, a)$ comme le tableau de tous les nœuds visités par find(root, a). Nous définissons également le coût de find(root, a) comme : $$\sum_{v \in A(root, a)} w[v].$$

Il y a maintenant $n$ BST vides et $m$ opérations. Votre tâche est de traiter ces opérations rapidement. Il existe deux types d'opérations différents :

  • « 1 $l$ $r$ $w$ ». Pour chaque $i \in [l, r]$, insérez un entier $w$ dans le $i$-ème BST. Il est garanti que $w$ n'est pas présent dans ces BST. L'insertion commence à la racine, suit le même chemin que find, mais au lieu d'effectuer le dernier appel find(0, w), elle crée un nouveau nœud avec la valeur $w$ à cet emplacement et s'arrête.
  • « 2 $x$ $a$ ». Calculez le coût de la recherche de $a$ dans le $x$-ème BST.

Entrée

La première ligne contient deux entiers, $n$ et $m$ ($1 \le n, m \le 2 \cdot 10^5$), indiquant le nombre de BST et le nombre d'opérations.

Ensuite, $m$ lignes suivent. Chaque ligne contient la description d'une opération et est formatée soit comme « 1 $l$ $r$ $w$ » ($1 \le l \le r \le n$; $1 \le w \le 10^9$), soit comme « 2 $x$ $a$ » ($1 \le x \le n$; $1 \le a \le 10^9$).

Il est garanti que tous les nombres insérés ($w$ dans les opérations du premier type) sont distincts les uns des autres.

Sortie

Pour chaque opération du second type, affichez une seule ligne contenant un seul entier : le coût.

Exemples

Entrée 1

3 9
1 1 2 2
1 1 3 1
1 2 3 3
2 1 2
2 1 4
2 2 2
2 2 4
2 3 2
2 3 4

Sortie 1

2
2
2
5
4
4

Implémentation de la recherche d'une valeur a dans un BST enraciné au nœud x

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.