Pagini recente » Cod sursa (job #2369077) | Cod sursa (job #1043253) | Cod sursa (job #2870919) | Cod sursa (job #2777046) | Cod sursa (job #2457804)
#include <iostream>
#include <fstream>
using namespace std;
int n, m;
int a[15001];
int aib[15001];
int min_kettohatv(int k)
{
return (k ^ (k-1)) & k;
}
int osszeg(int kezd, int veg)
{
int ered = 0;
for(int i=kezd; i<=veg; i++)
{
ered+=a[i];
}
return ered;
}
void fizet(int nap, int penz)
{
for(int i=nap; i<=n; i+=min_kettohatv(i))
{
aib[i]-=penz;
}
}
int lekerdez(int kezd, int veg)
{
int ered_veg = 0;
for(int i=veg; i>=1; i-=min_kettohatv(i))
{
ered_veg += aib[i];
}
int ered_kezd = 0;
for(int i=kezd-1; i>=1; i-=min_kettohatv(i))
{
ered_kezd += aib[i];
}
return ered_veg-ered_kezd;
}
int main()
{
ifstream f("datorii.in");
ofstream g("datorii.out");
//adatok beolvasasa
f>>n>>m;
for(int i=1; i<=n; i++) f>>a[i];
//binarisan indexelt fa letrehozasa(lasd a cikket az Infoarenan)
for(int i=1; i<=n; i++)
{
//cout<<i<<" "<<i-min_kettohatv(i)+1<<endl;
aib[i]=osszeg(i-min_kettohatv(i)+1, i);
}
//muveletek feldolgozasa
int kod, a, b;
for(int i=1; i<=m; i++)
{
f>>kod>>a>>b;
if(kod==0)
{
fizet(a, b);
}
else g<<lekerdez(a, b)<<endl;
}
return 0;
}