Pagini recente » Cod sursa (job #1943717) | Cod sursa (job #1771323) | Cod sursa (job #1586141) | Cod sursa (job #1642180) | Cod sursa (job #3309576)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
void update(int poz, int val);
int detsuma(int st, int dr);
int detpozmin(int val);
int n, m;
int aib[100001], v[100001];
int main()
{
fin>>n>>m;
for(int i = 1; i <= n; ++i)
{
fin>>v[i];
update(i, v[i]);
}
for(int i = 1; i <= m; ++i)
{
int tip, a, b;
fin>>tip;
if(tip == 0)
{
fin>>a>>b;
update(a, -b);
}
else if (tip == 1)
{
fin>>a>>b;
fout<<detsuma(a, b)<<"\n";
}
}
return 0;
}
int detpozmin(int val)
{
int scrt = 0, pozcrt = 0, p = (1<<18);
while(p > 0)
{
if(pozcrt + p <= n && scrt + aib[pozcrt + p] < val)
{
scrt += aib[pozcrt + p];
pozcrt += p;
}
else if (pozcrt + p <= n && scrt + aib[pozcrt + p] == val)
{
return pozcrt + p;
}
p /= 2;
}
return -1;
}
int detsuma(int st, int dr)
{
if(st != 1)
return detsuma(1, dr) - detsuma(1, st - 1);
int s = 0;
while(dr > 0)
{
s += aib[dr];
dr -= (dr & (-dr));
}
return s;
}
void update(int poz, int val)
{
while(poz <= n)
{
aib[poz] += val;
poz += (poz & (-poz));
}
}