Comprendre et Implémenter l'Arbre Cartésien en C++

Introduction à l'Arbre Cartésien L'arbre cartésien est une structure de données arborescente binaire dérivée d'une séquence de nombres. Il est particulièrement utile pour résoudre des problèmes tels que les requêtes de minimum/maximum sur un intervalle (RMQ) et les requêtes de type "top-k". Introduit par Jean Vuillemin en 1980 pour ré ...

Publié le 15 juin à 05h16

Calculer le nombre d'inversions avec des techniques de discrétisation

L'objectif est de compter le nombre d'inversions dans une séquence d'entiers. Une inversion est une paire d'indices (i, j) telle que i < j et arr[i] > arr[j]. Nous allons explorer deux approches principales, toutes deux offrant une complexité temporelle de O(log n) après prétraitement. Approche par Division et Fusion (Merge Sort) Cette mé ...

Publié le 10 juin à 01h29

Notes sur les algorithmes : résolution de problèmes avec arbres de segments et techniques connexes

Problème 0112G : Sous-séquence et carré de la diversité Énoncé Soit une séquence d'entiers positifs \(A_1, A_2, \dots, A_n\). On définit \(f(l,r)\) comme la taille de l'ensemble distinct \(\{A_l, A_{l+1}, \dots, A_r\}\). Calculer \(\sum_{l=1}^n \sum_{r=l}^n (f(l,r))^2 \mod 10^9+7\). Approche Commençons par le calcul de \(\sum_{l=1}^n\sum_{r=l}^ ...

Publié le 3 juin à 23h26