Qscmax

Time limit: 0.3s Memory limit: 64MB Input: qscmax.in Output: qscmax.out

Cerință

Se dă un vector cu numere naturale. Avem mai multe operații de două feluri:

  • Update: Elementul de pe o anumită poziție pp primește o valoare dată xx.
  • Query: Dați fiind doi indici stst și drdr să se determine lungimea subșirului crescător de lungime maximă pentru secvența care începe la poziția stst și se termină la poziția drdr.

Date de intrare

Pe prima linie a fișierului qscmax.in se află numărul de elemente ale șirului dat, notat nn.
Pe linia a doua se află nn numere, separate prin spațiu, reprezentând elementele șirului dat, în ordinea pozițiilor, numerotate de la 11 la nn.
Pe linia a treia se află numărul de operații, notat mm. Pe fiecare din următoarele mm linii se află descrierea câte unei operații. Dacă avem update, linia va conține valorile 11, pp, xx. Dacă avem query linia va conține valorile 22, stst, drdr.

Date de ieșire

Fișierul de ieșire qscmax.out va conține, pentru fiecare interogare rezultatul, în ordinea aparițiilor din fișierul de intrare. Valorile se scriu pe o linie, separate prin spațiu.

Restricții și precizări

  • 1n100 0001 \leq n \leq 100 \ 000;
  • În orice moment, valorile șirului sunt 00, 11, 22 sau 33;
  • 1m100 0001 \leq m \leq 100 \ 000;
  • Avem cel puțin o operație “query”;
  • 1pn1 \leq p \leq n;
  • 1stdrn1 \leq st \leq dr \leq n.

Exemplu

qscmax.in

9
0 1 3 0 1 2 1 2 0
3
2 1 9
1 3 0
2 1 3

qscmax.out

5 2

Explicație

La prima interogare se cere lungimea subșirului crescător din tot șirul dat. Aceasta este 55.
La a doua interogare se cere lungimea subșirului crescător pentru elementele de pe poziții de la 11 la 33. Aceasta este 22 (elementul de pe poziția 33 a devenit între timp 00).

Log in or sign up to be able to send submissions!