Pagini recente » Cod sursa (job #1782313) | Cod sursa (job #1550396) | Cod sursa (job #2738340) | Cod sursa (job #1677971) | Cod sursa (job #2486015)
#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];
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;
}
inline int bin_s(int left, int right, int val)
{
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;
}