Pagini recente » Cod sursa (job #2988015) | Cod sursa (job #96088) | Cod sursa (job #847694) | Cod sursa (job #369982) | Cod sursa (job #303904)
Cod sursa(job #303904)
#include <fstream>
#define NMAX 16000
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int N, M, A[NMAX], S[NMAX];
void add(int ind, int val, int s)
{
int p = 0;
while (ind <= N)
{
S[ind] += val*s;
while ((ind & (1 << p)) == 0)
p++;
ind += 1 <<p;
p++;
}
}
int interogare(int st, int dr)
{
int s1 = 0, p = 0, s2 = 0;
while (dr > 0)
{
s1 += S[dr];
while ((dr & (1 << p)) == 0)
p++;
dr -= 1 << p;
p++;
}
p = 0, st--;
while (st > 0)
{
s2 += S[st];
while ((st & (1 << p)) == 0)
p++;
st -= 1 << p;
p++;
}
return s1 - s2;
}
int main()
{
int v, ind, t, i;
fin >>N >>M;
for (i = 1; i <= N; i++)
fin >>v, add(i,v,1);
for (i = 1;i <= M; i++)
{
fin >>t >>ind >>v;
if (t == 0)
add(ind,v,-1);
if (t == 1)
fout<<interogare(ind,v)<<'\n';
}
fout.close();
return 0;
}