Pagini recente » Cod sursa (job #523843) | Cod sursa (job #2286489) | Arhiva de probleme | Cod sursa (job #3204254) | Cod sursa (job #558864)
Cod sursa(job #558864)
#include<fstream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
int tip,poz,val,C[15001],i,n,m,k,aux,dr,st;
void schimba(int poz, int val)
{
while(poz<=n)
{
C[aux=poz]-=val;
k=0;
while( !(aux & 1) )
{
k++;
aux>>=1;
}
poz+=1 << k;
}
}
int suma(int poz)
{
int sum=0;
while(poz>0)
{
sum+=C[aux=poz];
k=0;
while( !(aux & 1) )
{
k++;
aux>>=1;
}
poz-= 1 << k;
}
return sum;
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>val;
schimba(i,-val);
}
for(i=1;i<=m;i++)
{
in>>tip;
if( !tip )
{
in>>poz>>val;
schimba(poz,val);
continue;
}
in>>st>>dr;
out<<suma(dr)-suma(st-1)<<"\n";
}
return 0;
}