Pagini recente » Cod sursa (job #2175947) | Cod sursa (job #3262482) | Cod sursa (job #2882083) | Cod sursa (job #2701222) | Cod sursa (job #2486023)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int Nmax = 1e5 + 5;
int x,y,N,M,p;
int a[Nmax];
static inline int bit(int x)
{
return (x ^ (x - 1)) & x;
}
inline void add(int x,int y)
{
for(int i = x; i <= N; i += bit(i))
a[i] += y;
}
int query(int x)
{
int S = 0;
for(int i = x; i >= 1; i -= bit(i))
S += a[i];
return S;
}
static inline int bin_s(int left, int right, int val)
{
if(left <= right)
{
int m = left + (right - left) / 2;
int found = query(m);
if(found == val)
return m;
else if(found > val)
bin_s(left,m - 1,val);
else bin_s(m + 1,right,val);
}
}
int main()
{
ios_base::sync_with_stdio(0);
in >> N >> M;
for(int i = 1; i <= N; ++i)
{
int X;
in >> X;
add(i,X);
}
for(; M; --M)
{
in >> p >> x;
if(!p)
{
in >> y;
add(x,y);
}
else if(p == 1)
{
in >> y;
out << query(y) - query(x - 1) << '\n';
}
else out << bin_s(1,N,x) << '\n';
}
return 0;
}