Pagini recente » Cod sursa (job #662991) | Cod sursa (job #256739) | Cod sursa (job #1364546) | Cod sursa (job #2528239) | Cod sursa (job #1712995)
#include<cstdio>
#include<vector>
#include<algorithm>
int lsb(int val)
{
return val&(-val);
}
class AIB
{
private:
int N;
std::vector<int> elem;
public:
AIB();
AIB(int _N);
~AIB();
void Set_N(int _N);
void Update(int val,int poz);
int Query(int x);
int Query(int x,int y);
};
AIB::AIB(int _N)
{
Set_N(_N);
}
void AIB::Set_N(int _N)
{
N=_N;
elem.resize(N+1);
for(int i=0;i<=N;i++)
elem[i]=0;
}
AIB::~AIB()
{
elem.erase(elem.begin(),elem.end());
}
void AIB::Update(int val,int poz)
{
for(int i=poz;i<=N;i+=lsb(i))
elem[i]+=val;
}
int AIB::Query(int x)
{
int S=0;
for(int i=x;i>=1;i-=lsb(i))
{
S+=elem[i];
}
return S;
}
int AIB::Query(int x,int y)
{
return Query(std::max(x,y))-Query(std::min(x,y)-1);
}
int main()
{
//FILE *in=fopen("a.in","r"),*out=fopen("a.out","w");
FILE *in=fopen("datorii.in","r"),*out=fopen("datorii.out","w");
int n,m;
fscanf(in,"%d %d ",&n,&m);
AIB X(n);
for(int i=1;i<=n;i++)
{
int x;
fscanf(in,"%d ",&x);
X.Update(x,i);
}
for(int i=1;i<=m;i++)
{
int tip,a,b;
fscanf(in,"%d %d %d ",&tip,&a,&b);
if(tip==0)
{
X.Update(-b,a);
}
else
{
fprintf(out,"%d\n",X.Query(a,b));
//fprintf(stderr,"%d\n",X.Query(a,b));
}
}
fclose(in);
fclose(out);
return 0;
}