Pagini recente » Cod sursa (job #1317824) | Cod sursa (job #2422673) | Cod sursa (job #2810428) | Cod sursa (job #685525) | Cod sursa (job #2503926)
#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=-1;
int poz=z;
while(i<=logs[2*n-1])
{
i++;
aint[i][poz]-=v;
poz=(poz+1)/2;
}
}
bool containspoz(int r, int p, int poz)
{
if((1<<r)*(p-1)+1 <=poz && poz<=(1<<r)*p)
return true;
return false;
}
int query(int poz)
{
if(poz==0)
return aint[0][1];
int s=0;
int r=logs[2*n-1];
int p=1;
while(!(r==0 && p==poz))
{ cout<<r<<" "<<containspoz(r,p,poz)<<" ";
if(containspoz(r,p,poz))
{
r--;
p*=2;
p--;
}
else {
s+=aint[r][p];
p++;
}
}
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;
}