Rezolvare completă PbInfo #3373 culori4

Am o prietenă creatoare de modă. Pentru a-și realiza creațiile ea vopsește uneori materialele și mă roagă în prealabil să o ajut. Azi vrea să vopsească o pânză cu lungimea N cm folosind C nuanțe ale aceleiași culori, codificate de la 1 la C. Fiecare cm de pânză fiind colorat cu aceeași nuanță pe toată lățimea, va ieși o pânză în dungi. Inițial eu simulez cu ajutorul calculatorului vopsirea materialului, prietena mea începe apoi să intervină: de la cm A la cm B, trebuie modificată intensitatea culorii cu X puncte (intensitatea poate crește sau poate scădea, obținându-se astfel o altă nuanță). După nenumărate modificări de acest tip, să spunem M modificări, prietena mea va fi mulțumită și va trece la vopsirea efectivă a pânzei.

Cerința

Scrieţi un program care determină și afișează:
1. Lungimea maximă a unei bucăți de pânză de aceeași culoare după vopsirea inițială;
2. Cum va arăta pânza în urma modificărilor prietenei mele.

Date de intrare

Fișierul de intrare culori.in conține pe prima linie cerința (1 sau 2). Linia următoare conține trei numere naturale C N M separate prin câte un spațiu, reprezentând numărul de culori, lungimea în cm a pânzei, respectiv numărul de modificări efectuate de prietena mea; următoarea linie conține N numere naturale separate prin câte un spațiu, c1 c2 c3 ... cN reprezentând culoarea fiecărui cm de pânză după vopsirea inițială, iar următoarele M linii conțin fiecare câte trei numere: două numere naturale A B, separate printr-un spațiu, reprezentând A – poziția la care începe și B – poziția finală la care se termină modificarea intensității și, separat printr-un spațiu, un număr întreg X reprezentând valoarea cu care se modifică intensitatea.

Date de ieșire

Fișierul de ieșire culori.out va conține o singură linie pe care va fi scris un număr natural determinat conform cerinței, dacă cerința este 1 sau N numere naturale determinate conform cerinței, dacă cerința este 2.

Restricții și precizări

  • 0 < N < 10001
  • 0 < C < 1000001
  • 0 < M < 200001
  • în urma tuturor modificărilor nuanțele rămân în mulțimea {1, 2, ..., C}

Exemplul 1:

culori.in

1
3 8 2
1 1 2 2 2 2 3 3 
2 5 1
5 8 -1

culori.out

4

Explicație

Cea mai lungă secvență de elemente egale este 2 2 2 2 și are 4 elemente

Exemplul 1:

culori.in

2
3 8 2
1 1 2 2 2 2 3 3
2 5 1
5 8 -1

culori.out

1 2 3 3 2 1 2 2 

Explicație

După prima modificare vectorul este: 1 2 3 3 3 2 3 3.
După a doua modificare este: 1 2 3 3 2 1 2 2.

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 culori4:

//prof. Lucia Miron
#include <fstream>
#include <cassert>

using namespace std;
ifstream fin("culori.in");
ofstream fout("culori.out");
int cc,n,m,c[20001], i, j, lg, lgmax,cer,a,b,x;
int v1[20001];

int main()
{
    fin>>cer;
    assert(cer == 1 || cer == 2);
    fin>>cc>>n>>m;
    assert(cc > 0 && cc < 1000001);
    assert(n > 0 && n < 10001);
    assert(m > 0 && m < 200001);
    for(i=1; i<=n; i++)
    {
    fin>>c[i];
        assert(c[i] > 0 && c[i] <= cc);
    }
    if(cer==1)
    {
        lg=1;
        for(i=2; i<=n; i++)
            if(c[i]==c[i-1])lg++;
            else
            {
                if(lg>lgmax)lgmax=lg;
                lg=1;
            }
        if(lg>lgmax)lgmax=lg;
        fout<<lgmax<<endl;
    }
    else
    {
        for(i=1; i<=m; i++)
        {
            fin>>a>>b>>x;
            assert(a > 0 && a < n);
            assert(b >= a && b <= n);
            v1[a]+=x;
            v1[b+1]+=-x;
        }
        for(i=1; i<=n; i++)
            v1[i]=v1[i-1]+v1[i];
        for(i=1; i<=n; i++)
        {
            c[i]=c[i]+v1[i];
            assert(c[i] > 0 && c[i] <= cc);
            fout<<c[i]<<' ';
        }
    }
    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 #3373 culori4

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3373 culori4 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!