Pagini recente » Cod sursa (job #2496817) | Cod sursa (job #1159588) | Cod sursa (job #2899626) | Cod sursa (job #197808) | Cod sursa (job #1809183)
#include <fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int Max = 100010;
int aib[Max], n, meh;
void aibUpdate(int i, int s)
{
for(; i <= n; i+=i&(-i))
{
if(aib[i] - s > 0)
aib[i]-= s;
else
aib[i] = 0;
}
}
void aibTopla(int i, int s)
{
for(; i <= n; i+=i&(-i))
aib[i]+= s;
}
int aibQuery(int i)
{
int s = 0;
for(; i >= 1; i-=i&(-i))
s+= aib[i];
return s;
}
int main()
{
int m, tur, x, y;
in >> n >> m;
for(meh = 1; (1 << meh) <= n; ++meh);
meh--;
for(int i = 1; i <= n; ++i)
{
in >> x;
aibTopla(i, x);
}
for(; m; --m)
{
in >> tur;
if(tur == 0)
{
in >> x >> y;
aibUpdate(x, y);
}
else if(tur == 1)
{
in >> x >> y;
out << aibQuery(y) - aibQuery(x - 1) << "\n";
}
}
return 0;
}