QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 256 MB Total points: 100

#1215. Seinät

Statistics

Olet saanut käsiisi JOI Corp. -yhtiön julkaiseman videopelin. Se on hyvin tehty peli, ja olet pelannut sitä joka päivä viihtyen sen parissa.

Eräänä päivänä pelaajien keskuudessa nousi esiin kenttä nimeltä "Laser". Tämä kenttä vaikuttaa äärimmäisen vaikealta, ja sanotaan, että jopa huippupelaajat pääsevät sen läpi vain hyvin pienellä todennäköisyydellä. Yritettyäsi kenttää monta kertaa huomasit, että sen läpäiseminen on mahdollista tekemällä erittäin nopeita ratkaisuja, ja ajattelit, että voisit selviytyä siitä laatimalla ohjelman.

Laserkenttä sijoittuu paikkaan, johon on asetettu $N$ seinää. Kenttä on suorakulmainen ja jaettu $1 \times 1$ -kokoisiin neliöruutuihin. Jokaista ruutua merkitään $(x, y)$ käyttäen kokonaislukuja $x, y \ge 0$. $(0, 0)$ on vasemmassa alakulmassa oleva ruutu, ja $(x, y)$ tarkoittaa ruutua, joka on $x$ ruutua oikealle ja $y$ ruutua ylös ruudusta $(0, 0)$.

Kun kenttä alkaa, viholliset ilmestyvät ja hyökkäävät. Hyökkäyksiä suoritetaan peräkkäin $M$ kappaletta. $j$-nnessä hyökkäyksessä vihollinen ampuu lasersäteen suoraan ruudusta $(P_j, N+1)$ kohti ruutua $(P_j, 0)$.

Jokainen seinä sijaitsee useassa peräkkäisessä ruudussa, joilla on sama $y$-koordinaatti. Seinä $i$ ($1 \le i \le N$) on suorakulmio, jonka vaakasuora leveys on $B_i - A_i + 1$ ja pystysuora korkeus on $1$. Kentän alussa se peittää ruudut $(A_i, i)$ – $(B_i, i)$. Voit siirtää seiniä vaakasuunnassa niin monta kertaa kuin haluat sekä ennen vihollisen ensimmäistä hyökkäystä että minkä tahansa kahden hyökkäyksen välissä. Yhdellä siirrolla voit siirtää yhtä seinää yhden ruudun oikealle tai yhden ruudun vasemmalle.

Kun laser osuu seinään, sen teho heikkenee. Haluat minimoida laserin tehon siirtämällä seiniä niin, että laser osuu kaikkiin seiniin.

Tässä kentässä haluat minimoida seinien siirtojen kokonaismäärän.

Tehtävä

Kun seinien alkusijainnit ja vihollisen hyökkäysten sijainnit on annettu, laske pienin mahdollinen siirtojen määrä kullekin seinälle, jotta jokainen laser osuu jokaiseen seinään.

Syöte

Lue vakiosyötteestä seuraavat tiedot:

  • Ensimmäinen rivi sisältää kaksi välilyönnillä erotettua kokonaislukua $N$ ja $M$. Tämä ilmaisee, että tässä kentässä on $N$ seinää ja siinä suoritetaan $M$ hyökkäystä.
  • Seuraavien $N$ rivin $i$-s rivi ($1 \le i \le N$) sisältää kaksi välilyönnillä erotettua kokonaislukua $A_i$ ja $B_i$. Tämä ilmaisee, että kentän alussa seinä $i$ on sijoitettu ruudusta $(A_i, i)$ ruutuun $(B_i, i)$.
  • Seuraavien $M$ rivin $j$-s rivi ($1 \le j \le M$) sisältää kokonaisluvun $P_j$. Tämä ilmaisee, että $j$-nnessä hyökkäyksessä vihollinen ampuu laserin suoraan ruudusta $(P_j, N+1)$ kohti ruutua $(P_j, 0)$.

Tuloste

Tulosta vakiotulosteeseen $N$ riviä. $i$-nnellä rivillä ($1 \le i \le N$) tulee olla seinän $i$ pienin mahdollinen siirtojen lukumäärä.

Rajoitukset

Kaikki syötetiedot täyttävät seuraavat ehdot:

  • $1 \le N \le 200\,000$.
  • $1 \le M \le 200\,000$.
  • $0 \le A_i \le B_i \le 1\,000\,000\,000$ ($1 \le i \le N$).
  • $0 \le P_j \le 1\,000\,000\,000$ ($1 \le j \le M$).

Osatehtävät

Osatehtävä 1 [10 pistettä]

  • $N = 1$ pätee.

Osatehtävä 2 [45 pistettä]

  • $A_i = 0$ ($1 \le i \le N$) pätee.

Osatehtävä 3 [45 pistettä]

  • Ei lisärajoituksia.

Esimerkit

Syöte 1

4 4
0 3
4 4
2 7
8 11
6
4
3
8

Tuloste 1

5
10
1
7

Huomautus

Tässä syötteessä eräs tapa minimoida seinien siirtojen lukumäärä on seuraava:

  • Ennen 1. hyökkäystä: siirrä seinää 1 oikealle 3 kertaa, siirrä seinää 2 oikealle 2 kertaa, älä siirrä seinää 3 ja siirrä seinää 4 vasemmalle 2 kertaa.
  • Ennen 2. hyökkäystä: älä siirrä seinää 1, siirrä seinää 2 vasemmalle 2 kertaa, älä siirrä seinää 3 ja siirrä seinää 4 vasemmalle 2 kertaa.
  • Ennen 3. hyökkäystä: älä siirrä seinää 1, siirrä seinää 2 vasemmalle 1 kerran, älä siirrä seinää 3 ja siirrä seinää 4 vasemmalle 1 kerran.
  • Ennen 4. hyökkäystä: siirrä seinää 1 oikealle 2 kertaa, siirrä seinää 2 oikealle 5 kertaa, siirrä seinää 3 oikealle 1 kerran ja siirrä seinää 4 oikealle 2 kertaa.

Tällä tavoin seinää 1 siirretään 5 kertaa, seinää 2 siirretään 10 kertaa, seinää 3 siirretään 1 kerran ja seinää 4 siirretään 7 kertaa.

stage_start.png

Kentän alku

1st_attack.png

1. hyökkäys

2nd_attack.png

2. hyökkäys

3rd_attack.png

3. hyökkäys

4th_attack.png

4. hyökkäys

Syöte 2

7 11
12 39
22 23
5 38
6 47
10 43
0 50
18 46
38
19
15
1
12
29
29
0
6
40
6

Tuloste 2

34
178
13
6
18
0
36

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

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.