N
elemente, numere întregi. Pe acest șir se aplică operații de două tipuri :
- Tip 1:
st dr val
– elementele de pe pozițiile din intervalul[st, dr]
cresc cu valoareaval
- Tip 2:
poz
– să se afișeze valoarea elementului de pe pozițiapoz
.
Toate operațiile de tipul2
se aplică numai după ce s-au aplicat toate operațiile de tipul1
.
Cerința
Dându-se șirul de elemente și operațiile, începand cu cele de tipul 1
, aplicați operațiile pe șir.
Date de intrare
Fișierul de intrare twoop.in
conține pe prima linie numărul de elemente, N
, numărul de operații de tip 1, nrOp1
, și numărul de operații de tip 2, nrOp2
.
Pe următoarea linie se află cele N
elemente separate printr-un spațiu.
Pe următoarele nrOp1
linii se află câte o operație de tip 1
sub forma: st dr val
.
Pe următoarele nrOp2
linii se află câte o operație de tip 2
sub forma: poz
.
Date de ieșire
Fișierul de ieșire twoop.out
va conține pe primele nrOp2
linii câte un element, rezultatul unei operații de tip 2
.
Restricții și precizări
1 ≤ N ≤ 100000
-1.000.000.000 ≤ a[i], val ≤ 1.000.000.000
1 ≤ st ≤ dr ≤ N
1 ≤ poz ≤ N
Exemplu
twoop.in
4 4 2 5 0 -1 2 1 2 -2 2 3 10 1 4 2 2 3 3 2 3
twoop.out
13 14
Explicație
5 0 -1 2
– șir initial
3 -2 -1 2
– după operația 1
3 8 9 2
– după operația 2
5 10 11 4
– după operația 3
5 13 14 4
– după operația 4
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 twoop:
#include <fstream>
using namespace std;
ifstream f("twoop.in");
ofstream g("twoop.out");
#define NMAX 100010
int n, nrOp1, nrOp2, st, dr, val, poz;
long long v[NMAX], res[NMAX];
void op1()
{
res[st] += val;
res[dr + 1] -= val;
}
void precalc()
{
int i;
for (i = 1;i <= n;i++)
res[i] += res[i - 1];
}
void op2()
{
g<<res[poz] + v[poz]<<'\n';
}
int main()
{
int i;
f>>n>>nrOp1>>nrOp2;
for (i = 1;i <= n;i++)
f>>v[i];
for (i = 1;i <= nrOp1;i++)
{
f>>st>>dr>>val;
op1();
}
precalc();
for (i = 1;i <= nrOp2;i++)
{
f>>poz;
op2();
}
}
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 #1835 twoop
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1835 twoop 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!