Informatică, întrebare adresată de lilianacamelia75, 8 ani în urmă

Cerința
Urmează o perioadă aglomerată și trebuie să ajutați un magazin să își gestioneze stocul. Magazinul are N obiecte indexate de la 1 la N, iar fiecare obiect are un stoc. Trebuie să procesați T operații de tipul:

1) x y p: stocul obiectelor cu ale caror indice se afla intre [x, y] creste cu p
2) x y p: stocul obiectelor cu ale caror indice se afla intre [x, y] scade cu p

In urma unei operatii de tip 2 se poate ca stocul sa fie negativ, caz in care proprietarii raman cu datorie

Date de intrare
Programul citește din fisierul easyquery.in numărul n, pe urmatoarea linie n numere naturale reprezentand stocul magazinului, T, si apoi T intrebari definite ca mai sus.

Date de ieșire
Programul va afisa in fisierul easyquery.out stocul pentru fiecare obiect dupa cele T operatii.

Restricții și precizări
1≤N≤105
1≤T≤105
0≤vi≤109
0≤p≤109


Exemplu
easyquery.in

5
1 2 6 3 1
3
1 5 5 2
2 4 5 1
1 1 5 3
easyquery.out

4 5 9 5 5
Explicație
In urma primei operatii stocul va fi (1 2 6 3 3)
In urma celei de a doua operatie stocul va fi (1 2 6 2 2)
In urma celei de a treia operatie stocul va fi (4 5 9 5 5)

rezolvarea mea:
#include
#include
using namespace std;
ifstream f("easyquery.in");
ofstream g("easyquery.out");
int main()
{
int n,T,v[10001],p,i,t[10001],x,y,j;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
f>>T;
for(j=1;j<=T;j++)
f>>t[j];
for(j=1;j<=T;j++){
f>>t[1]>>x>>y>>p;
if(t[1]==1){
v[x]=v[x]+p;
v[y+1]=v[y+1]-p;
}
else{
v[x]=v[x]-p;
v[y+1]=v[y+1]+p;
}
}
for(i=1;i<=n;i++)
g< return 0;
}


boiustef: care a fost rezultatul evaluării? văd că codul tău e corect. Asta că eu nu am folosit vectorul t[]... şi care e rostul lui. mai bine foloseai o simplă variabilă
boiustef: mă scuzi, văd că nu e bine folosit şmenul lui mars. Trebuie să foloseşti încă doi vectori ajutători A şi B. vezi codul meu

Răspunsuri la întrebare

Răspuns de boiustef
2

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("easyquery.in");

ofstream fout("easyquery.out");

long long n,i,j,x,y,p,op,v[100002],A[100003],B[100003],T;

int main()

{

  fin >> n;

  for (i=1; i<=n; ++i) fin >> v[i];

  fin >> T;

  for (i=1; i<=T; ++i)

  {

      fin >> op >> x >> y >> p;

      if (op==1) { B[x]+=p; B[y+1]-=p; }

      else { B[x]+=-p; B[y+1]-=-p; }

  }

  A[1]=B[1];

   for (i=2; i<=n; ++i)

       A[i]=A[i-1]+B[i];

   for (i=1; i<=n; ++i) v[i]+=A[i];

   for (i=1; i<=n; ++i)

   {

       fout << v[i] << " ";

   }

}

Explicație:

citeşte şmenul lui Mars de pe pbinfo, e fb explicat...

https://www.pbinfo.ro/?pagina=articole&subpagina=afisare&id=2541

Alte întrebări interesante