Pagini recente » Cod sursa (job #381537) | Cod sursa (job #939090) | Cod sursa (job #2460212) | Cod sursa (job #2123036) | Cod sursa (job #3252294)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
#define dim 15005
#define dim_bucket 130
int v[dim],n,bucket_size,b[dim_bucket];
void init()
{
int i,j;
j=1;
for(i=1;i<=n;i++)
{
b[(i-1)/bucket_size+1]+=v[i];
}
}
void update(int x,int y)
{
///din ziua x scadem y
v[x]-=y;
b[(x-1)/bucket_size+1]-=y;
}
int query(int x,int y)
{
int i,sum=0,bx,by;
if(y-x<bucket_size)
{
for(i=x;i<=y;i++)
sum+=v[i];
return sum;
}
bx=(x-1)/bucket_size+1;
by=(y-1)/bucket_size+1;
for(i=bx+1;i<by;i++) ///bucket-urile complete
sum+=b[i];
for(i=x;i<=bx*bucket_size;i++) ///bucket-ul incomplet al lui x
sum+=v[i];
for(i=(by-1)*bucket_size+1;i<=y;i++) ///bucket-ul incomplet al lui y
sum+=v[i];
return sum;
}
int main()
{
int m,x,y,i;
bool op;
fin>>n>>m;
bucket_size=sqrt(n);
for(i=1;i<=n;i++)
{
fin>>v[i];
}
init();
for(i=1;i<=m;i++)
{
fin>>op>>x>>y;
if(op==0)
{
///update
update(x,y);
}
else if(op==1)
{
///query
fout<<query(x,y)<<'\n';
}
}
return 0;
}