Pagini recente » Cod sursa (job #53196) | Cod sursa (job #2561236) | Cod sursa (job #2695876) | Cod sursa (job #1444572) | Cod sursa (job #2503934)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("datorii.in");
ofstream g ("datorii.out");
int n, q;
int vek[15005];
int logs[100000];
int aint[100][5011];
void addaint(int poz, int a)
{
aint[0][poz]=a;
int i=0;
while(i<=logs[2*n-1])
{
i++;
aint[i][(poz+1)/2]+=a;
poz=(poz+1)/2;
}
}
void subs(int v, int z)
{
int i=0;
int poz=z;
while(i<=logs[2*n-1])
{
aint[i][poz]-=v;
poz=(poz+1)/2;
i++;
}
}
int query(int poz)
{
int h=0,s=aint[0][poz],r=logs[2*n-1];
while(h<=r)
{
if(poz%2==0) s+=aint[h][poz-1];
poz=(poz+1)/2;
h++;
}
return s;
}
int main()
{
f>>n>>q;
for(int i=1;i<=100001;++i)
{
logs[i]=logs[i/2]+1;
}
cout<<"j";
for(int i=1;i<=n;++i)
{
f>>vek[i];
addaint(i, vek[i]);
cout<<"j";
}
for(int i=1;i<=q;++i)
{
cout<<"k";
int t;
f>>t;
if(t==0)
{
int z, v;
f>>z>>v;
subs(v,z);
}
else {
int p,q;
f>>p>>q;
int s=0;
cout<<query(q)<<" "<<query(p-1);
s=query(q)-query(p-1);
g<<s<<"\n";
}
}
return 0;
}