Pagini recente » Cod sursa (job #2492986) | Cod sursa (job #450300) | Cod sursa (job #2690999) | Cod sursa (job #3226215) | Cod sursa (job #2863199)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 100005;
int aib[NMAX],n;
void update(int x,int val)
{
for(int i = x;i <= n;i += i & -i)
{
aib[i] += val;
}
}
int query(int x)
{
int s = 0,i;
for(i = x;i > 0;i -= i & -i)
s += aib[i];
return s;
}
int query2(int a)
{
int st = 1,dr = n;
while(st <= dr)
{
int mid = st + (dr - st) / 2;
if(query(mid) == a)
return mid;
if(query(mid) < a)
st = mid + 1;
else
dr = mid - 1;
}
return -1;
}
int main()
{
int m,x;
fin>>n>>m;
for(int i = 1;i <= n;i++)
{
fin>>x;
update(i,x);
}
int t,y;
for(int i = 1;i <= m;i++)
{
fin>>t;
if(t == 0)
{
fin>>x>>y;
update(x,y);
}
if(t == 1)
{
fin>>x>>y;
fout<<query(y) - query(x - 1)<<"\n";
}
if(t == 2)
{
fin>>x;
fout<<query2(x)<<"\n";
}
}
return 0;
}