Pagini recente » Cod sursa (job #145197) | Cod sursa (job #2262048) | Istoria paginii runda/boji_round4 | Cod sursa (job #553998) | Cod sursa (job #1608425)
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 150005
using namespace std;
int N, M;
vector<int> V;
void Update (int poz, int val);
int Find (int val, int st, int dr);
int Query (int poz);
int main()
{
int val, a, b;
bool q;
freopen("aib.in", "rt", stdin);
freopen("aib.out", "wt", stdout);
scanf("%d%d", &N, &M);
V.assign(N+2, 0);
for(int i=1; i<=N; ++i){
scanf("%d", &val);
Update(i, val);
}
while(M--)
{
scanf("%d", &q);
if(q == false)
{
scanf("%d%d", &a, &b);
Update(a, -b);
}
else
{
scanf("%d%d", &a, &b);
cout<<Query(b)-Query(a-1)<<'\n';
}
}
}
void Update(int poz, int val)
{
while(poz<=N)
{
V[poz] +=val;
poz += poz-(poz&(poz-1));
}
}
int Query(int poz)
{
int S=0;
while(poz>0)
{
S+=V[poz];
poz = poz&(poz-1);
}
return S;
}
int Find(int val, int st, int dr)
{
if(st>dr)
return -1;
int mij = st+((dr-st)/2);
int vmij = Query(mij);
if(val == vmij)
return mij;
else if(val < vmij)
return Find(val, st, mij-1);
else
return Find(val, mij+1, dr);
}