Pagini recente » Cod sursa (job #1701601) | Cod sursa (job #349421) | Cod sursa (job #1629610) | Cod sursa (job #2568389) | Cod sursa (job #1316811)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,v[NMAX],aib[NMAX];
int powTwo(int x)
{
return (x^(x-1))&x;
}
void update(int i1,int val)
{
v[i1]+=val;
for (int i=i1;i<=n;i+=powTwo(i))
{
aib[i]+=val;
}
}
int sum_capat(int dr)
{
if (dr<1)
return 0;
return aib[dr]+sum_capat(dr-powTwo(dr));
}
void sum(int st,int dr)
{
g<<sum_capat(dr)-sum_capat(st-1)<<'\n';
}
int mink(int value)
{
int s=0;
for (int i=1;i<=n;i++)
{
s+=v[i];
if (s==value)
return i;
}
return 0;
}
int main()
{
f>>n>>m;
for (int i=1;i<=n;i++)
{
f>>v[i];
int pi=powTwo(i);
int indice=i-1;
aib[i]=v[i];
while (indice!=i-pi)
{
aib[i]+=aib[indice];
indice-=powTwo((indice));
}
}
for (int i=1;i<=m;i++)
{
int operand=0;
f>>operand;
/*switch(operand)
{
case 1: {
int a,b;
f>>a>>b;
sum(a,b);
}
case 2: {
int a;
f>>a;
g<<mink(a)<<'\n';
}
case 0:{
int a,b;
f>>a>>b;
update(a,b);
}
}
*/
if (operand==1)
{
int a,b;
f>>a>>b;
sum(a,b);
}
else if (operand==2)
{
int a;
f>>a;
g<<mink(a)<<'\n';
}
else
{
int a,b;
f>>a>>b;
update(a,b);
}
}
g.close();
return 0;
}