Rezolvare completă PbInfo #1233 Paint

Roberto are suflet de artist. El visează să ajungă într-o bună zi un pictor celebru, dar pentru moment își câştigă existența ca zugrav.

Roberto a primit sarcina de a zugrăvi un zid având lungimea n metri şi înălţimea un metru. Pentru aceasta are la dispoziţie m zile. În fiecare zi i, el acoperă cu un singur strat de vopsea o porţiune compactă de înălțime un metru și de lungime l[i] metri, începând de la distanţa d[i] metri faţă de capătul din stânga al zidului.

Roberto ştie din experienţă că fiecare porţiune de zid trebuie acoperită cu cel puţin K straturi de vopsea pentru ca stratul final de vopsea să aibă consistenţa dorită. Din nefericire, firea lui de artist nu i-a permis să-şi poată planifica munca în mod optim, astfel că la capătul celor m zile de efort, Roberto a constatat că zidul are porţiuni pe care le-a acoperit de mai mult de k ori şi alte porţiuni pe care le-a acoperit de mai puţin de k ori.

Pentru a recupera în proprii săi ochi dar mai ales în ochii şefului de echipă, el trebuie să afle mai întâi suprafaţa totală a tuturor porţiunilor de zid care mai trebuie zugrăvite.

Cerinţă

Cunoscând lungimea zidului n, numărul de zile m şi porţiunile compacte pe care le zugrăveşte în fiecare zi, determinaţi suprafaţa totală a zidului care mai trebuie zugrăvită.

Date de intrare

Fișierul de intrare paint.in conține pe prima linie trei numerele naturale n k m separate printr-un spațiu, unde n este lungimea zidului, k este numărul minim de straturi de vopsea pentru a se obţine consistenţa dorită, iar m este numărul de zile în care Roberto pictează.

Pe următoarele m linii se află câte două valori naturale separate prin câte un spațiu. Numerele d[i] şi l[i] de pe linia i+1 reprezintă distanţa faţă de capătul din stânga al zidului de la care începe să zugrăvească în ziua i, respectiv lungimea în metri a porţiunii de zid zugrăvite în ziua i.

Date de ieșire

Fișierul de ieșire paint.out va conține pe prima linie un număr natural S care reprezintă suprafaţa totală a zidului care nu a fost acoperită cu cel puţin k straturi de vopsea.

Restricții și precizări

  • 1 ≤ n, m ≤ 250 000
  • 1 ≤ k ≤ min(100 000, m)
  • 0 ≤ d[i] < l[i] < n

Exemplu

paint.in

5 2 3
0 2
1 3
2 3

paint.out

2

Explicație

n = 5, k = 2, m = 3.

În prima zi Roberto vopsește 2 m din zid între pozițiile 0 și 2. În a doua zi Roberto vopsește 3 m din zid între pozițiile 1 și 4. În a treia zi Roberto vopsește 3 m din zid între pozițiile 2 și 5.

Deci, începând cu capătul din stânga al zidului, se va găsi o porțiune de zid de lungime 1, acoperită cu un singur strat și începând de la distanța 4 față de capăt, se va găsi o altă porțiune de zid de lungime 1, acoperită cu un singur strat.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Paint:

/*
    prof. Constantin Galatan
    O(m)
    Mars's trick
*/
#include <fstream>
#include <vector>

std::ifstream fin("paint.in");
std::ofstream fout("paint.out");

int main()
{
    int n, m, k;
    fin >> n >> k >> m;
    std::vector<int> a(n + 3);

    for (int d(0), L(0); m--; a[++d]++, a[d + L]--)
        fin >> d >> L;

    int D(0);
    for (int i(0), cnt(0); i <= n; ++i) {
        cnt += a[i];
        if ( cnt < k ) D++;
    }

    fout << --D << '\n';

    fin.close();
    fout.close();
    return 0;
}





Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1233 Paint

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1233 Paint de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!