QOJ.ac

QOJ

実行時間制限: 3 s メモリ制限: 1024 MB 満点: 150

#9098. Cactus extraterrestres

統計

La surface d’une planète extraterrestre est essentiellement désertique, si bien qu’il y pleut rarement. Toutes les plantes de cette planète sont des cactus. Comme la pluie est très rare, les cactus ont développé par évolution un moyen de coopérer pour stocker l’eau.

Une région de la planète est un plan bidimensionnel ne comportant que les directions haut-bas et gauche-droite. On y trouve $N$ cactus côte à côte en une rangée. Chaque cactus mesure $1$ mètre de large, et leurs hauteurs peuvent différer. Pour embellir les lieux, on ne garde que les cactus de $S$ à $E$. Il pleut ensuite suffisamment pour remplir toutes les zones au-dessus des cactus capables de retenir de l’eau. L’eau s’accumule comme illustré ci-dessous. Dans la figure, considérez que les cactus hors de l’intervalle indiqué par les flèches ont été retirés.

problem_9098_8d8fb07b8bfc98519f9cf0827921f775.png

Écrivez un programme qui, étant donné les hauteurs et un intervalle de cactus conservés, calcule l’eau retenue sous forme d’aire. Au plus $Q$ intervalles sont donnés. Chaque intervalle s’applique toujours à l’état initial où tous les cactus sont présents.

Vous devez implémenter les fonctions suivantes.

  • void init( int H[] ) : Appelée exactement une fois au début. $H$ est un tableau (vecteur) de taille $N$ contenant les hauteurs des cactus de gauche à droite. $N$ est le nombre de cactus.
  • int query( int S, int E ) : Renvoyez l’aire de l’eau retenue après une pluie suffisante lorsque seuls les cactus de $S$ à $E$ restent ($1 \le S \le E \le N$). Cette fonction est appelée au plus $Q$ fois. Tous les appels sont indépendants : retirer des cactus lors d’un appel n’affecte pas les autres.

Détails d’implémentation

Soumettez exactement un fichier nommé cactus.cpp. Il doit implémenter les fonctions suivantes.

  • void init( int H[] )
  • long long query( int S, int E )

Ces fonctions doivent se comporter comme décrit ci-dessus. Vous pouvez définir d’autres fonctions à usage interne. Le code soumis ne doit effectuer aucune entrée ou sortie ni accéder à d’autres fichiers.

Correcteur d’exemple

Le correcteur fourni lit l’entrée au format suivant.

  • Ligne 1 : $N$, $Q$.
  • Ligne suivante : $N$ entiers strictement positifs, les hauteurs des cactus de gauche à droite.
  • $Q$ lignes suivantes : deux entiers strictement positifs $S,E$, indiquant qu’il pleut lorsque seuls les cactus de $S$ à $E$ restent ($1 \le S \le E \le N$).

Le correcteur fourni affiche les valeurs renvoyées par votre fonction query(), une par ligne.

Contraintes

  • $1 \le N \le 500\,000$, $1 \le Q \le 500\,000$ ; chaque cactus a une hauteur au moins égale à $1$ et au plus égale à $10^9$.

Sous-tâches

Sous-tâches 1 (13 points)

  • $1 \le N \le 5\,000$, $1 \le Q \le 5\,000$

Sous-tâches 2 (12 points)

  • $1 \le N \le 5\,000$

Sous-tâches 3 (22 points)

  • Chaque cactus a une hauteur au plus égale à $20$.

Sous-tâches 4 (34 points)

  • $1 \le N \le 100\,000$, $1 \le Q \le 100\,000$

Sous-tâches 5 (69 points)

  • Aucune contrainte supplémentaire par rapport aux contraintes initiales.

Exemples

Entrée 1

10 3
1 3 2 5 1 4 6 2 1 3
2 8
2 4
7 9

Remarque

Un exemple d’exécution de votre code pour l’entrée ci-dessus est présenté ci-dessous.

Appel Résultat
init( {1, 3, 2, 5, 1, 4, 6, 2, 1, 3} ) Appel initial
query( 2, 8 ) Appel de requête, valeur renvoyée $6$
query( 2, 4 ) Appel de requête, valeur renvoyée $1$
query( 7, 9 ) Appel de requête, valeur renvoyée $0$

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.