CSES - Bonustehtävä: Merkkijono
  • Time limit: 3.00 s
  • Memory limit: 512 MB

Sama tehtävä kuin Merkkijono, mutta syötteen koko on suurempi.

Uolevilla on merkkijono joka on nn merkkiä pitkä. Uolevi haluaa katkaista merkkijonon mm eri kohdasta, jolloin merkkijono katkeaa m+1m+1 eri osaan. Osien pituudet järjestyksessä vasemmalta oikealle ovat a1,,am+1a_1, \ldots, a_{m+1}. Kun Uolevi katkaisee xx merkkiä pitkän merkkijonon, hän käyttää xx operaatiota. Mikä on pienin määrä operaatiota joilla Uolevi saa hajotettua merkkijonon?

Syöte

Syötteen ensimmäisellä rivillä on kaksi lukua, nn ja mm, merkkijonon pituus ja monestako kohdasta merkkijono pitää katkaista. Seuraavalla m+1m+1 rivillä on luvut, a1,,am+1a_1, \ldots, a_{m+1}, merkkijonon osien pituudet katkaisujen jälkeen.

Tuloste

Tulosta yksi luku, pienin määrä operaatiota merkkijonon hajottamiseen.

Rajat

  • 1n1091 \le n \le 10^9
  • 1m50001 \le m \le 5000
  • 1ai1 \le a_i
  • i=1m+1ai=n\sum_{i=1}^{m+1}{a_i} = n

Esimerkki

Syöte:

8 2
3
3
2

Tuloste:

13

Uolevi katkaisee 8 merkkiä pitkän merkkijonon ensin osiin joiden pituudet ovat 3 ja 5. Sen jälkeen Uolevi katkaisee 5 merkkiä pitkän osan osiin joiden pituudet ovat 3 ja 2.

Syöte:

20 4
2
1
5
2
10

Tuloste:

40