Pagini recente » Cod sursa (job #1919341) | Cod sursa (job #2197406) | Cod sursa (job #2028674) | Cod sursa (job #58101) | Cod sursa (job #1081238)
#include<fstream>
#include<cstring>
#define NMAX 100010
using namespace std;
ifstream f("baruri.in");
ofstream g("baruri.out");
int T, n, val[NMAX], arb[NMAX], S;
inline int ultim(int x)
{
return x^(x&(x-1));
}
void Update(int val, int pz)
{
for (; pz<=n; pz+=ultim(pz))
arb[pz]+=val;
}
void Citeste()
{
int i;
f>>n;
memset (arb, 0, sizeof(arb));
for (i=1; i<=n; ++i)
{
f>>val[i];
Update(val[i], i);
}
}
void query(int lim, int pz)
{
int sum=0;
for (; pz>lim; pz-=ultim(pz))
S+=arb[pz];
}
void Solve()
{
int m, op, x, b1, b2;
f>>m;
while (m--)
{
f>>op;
if (op==1)
{
f>>x>>b1;
Update(x, b1);
val[b1]+=x;
}
else
if (op==2)
{
f>>x>>b1;
x*=-1; val[b1]+=x;
Update(x, b1);
}
else
if (op==3)
{
f>>x>>b1>>b2;
Update(x, b2); val[b2]+=x;
x*=-1;
Update(x, b1); val[b1]+=x;
}
else
{
f>>b1>>b2;
S=-val[b1];
query(b1-b2, b1+b2);
g<<S<<"\n";
}
}
}
int main()
{
f>>T;
while (T--)
{
Citeste();
Solve();
}
f.close();
g.close();
return 0;
}