Pagini recente » Cod sursa (job #2265641) | Cod sursa (job #3005662) | Cod sursa (job #3151082) | Cod sursa (job #2663759) | Cod sursa (job #2972986)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 100005;
int n,aib[NMAX];
void update(int a,int b){
for(int i = a;i <= n;i += i & -i)
aib[i] += b;
}
int query(int a){
int s = 0;
for(int i = a;i >= 1;i -= i & -i)
s += aib[i];
return s;
}
int bs(int a)
{
int st = 1,dr = n,mid;
while(st <= dr){
mid = st + (dr - st) / 2;
if(aib[mid] >= a)
dr = mid - 1;
else
st = mid + 1;
}
return dr + 1;
}
int main()
{
int m,x,y,z;
fin>>n>>m;
for(int i = 1;i <= n;i++)
{
fin>>x;
update(i,x);
}
for(int i = 1;i <= m;i++)
{
fin>>x>>y;
if(x != 2)
fin>>z;
if(x == 0)
update(y,z);
if(x == 1)
fout<<query(z) - query(y - 1)<<"\n";
if(x == 2)
{
fout<<bs(y)<<"\n";
}
}
return 0;
}