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 tipul2se 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!