Pagini recente » Cod sursa (job #75957) | Cod sursa (job #48017) | Cod sursa (job #2691203) | Cod sursa (job #546270) | Cod sursa (job #2032423)
#include <fstream>
#define in "aib.in"
#define out "aib.out"
#define N 100003
#define zerouri(x) ((x^(x-1))&x)
using namespace std;
ifstream fin(in);
ofstream fout(out);
int A[N];
int n,m,x,y,p;
int pos,val;
inline void adauga()
{
while(pos <= n)
{
A[pos] += val;
pos += zerouri(pos);
}
}
inline int suma(int E)
{
if(E == 0) return 0;
return A[E] + suma(E-zerouri(E));
}
inline int poz_minim(int S)
{
for(int i=1; i<=n; ++i)
if(suma(i) == S) return i;
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; ++i)
{
fin>>val;
pos = i;
adauga();
}
while(m--)
{
fin>>p;
if(p == 0)
{
fin>>pos>>val;
adauga();
}
else if(p == 1)
{
fin>>x>>y;
fout<<suma(y) - suma(x-1)<<"\n";
}
else if(p == 2)
{
fin>>x;
fout<<poz_minim(x)<<"\n";
}
}
fin.close(); fout.close();
return 0;
}