Pagini recente » Cod sursa (job #722209) | Cod sursa (job #507458) | Cod sursa (job #2963287) | Cod sursa (job #2239795) | Cod sursa (job #1516967)
#include <iostream>
#include <fstream>
using namespace std;
#define zeros(x) (x&-x)
ifstream fin("aib.in");
ofstream fout("aib.out");
int AIB[100001];
int n,m;
void add(int x, int cant)
{
for(int i=x;i<=n;i+=zeros(i))
AIB[i]+=cant;
}
int suma(int x)
{
int s=0;
for(int i =x;i>0;i-=zeros(i))
s+=AIB[i];
return s;
}
int search(int val)
{
int i, step;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n&&val>=AIB[i+step])
{
i+=step;
val-=AIB[i];
if(!val)return i;
}
return -1;
}
void caz0(){
int a,b;
fin>>a>>b;
add(a,b);
}
void caz1(){
int a,b;
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<'\n';
}
void caz2(){
int a;
fin>>a;
fout<<search(a)<<'\n';
}
int main()
{
int x;
fin>>n>>m;
for(int i=1;i<=n;i++)fin>>x,add(i,x);
for(int i=1;i<=m;i++)
{
fin>>x;
switch(x)
{
case 0:caz0();break;
case 1:caz1();break;
case 2:caz2();break;
}
}
return 0;
}