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 ≤ 10^5\)
- \(1 ≤ T ≤ 10^5\)
- \(0 ≤ v_i ≤ 10^9\)
- \(0 ≤ p ≤ 10^9\)
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)
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 EasyQuery:
#include <bits/stdc++.h>
const int MAX_N = 100000;
using namespace std;
int v[MAX_N];
long long s[MAX_N + 1];
int main(void)
{
ifstream in("easyquery.in");
ofstream out("easyquery.out");
int n, T;
int type, x, y, p;
in >> n;
for ( int i = 0; i < n; i++ )
in >> v[i];
in >> T;
while (T--)
{
in >> type >> x >> y >> p;
x--;
y--;
if (type == 2)
p = -p;
s[x] += p;
s[y + 1] -= p;
}
in.close();
long long sum = 0LL;
for (int i = 0; i < n; i++)
{
sum += s[i];
out << v[i] + sum << ' ';
}
out.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 .
Rezolvarea problemei #1268 EasyQuery
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1268 EasyQuery 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!