Pagini recente » Grigore Moisil 2011 | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2877029)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int N=1e5;
int v[N+5],aib[N+5];
int n;
inline int lsb(int x)
{
return x & (-x);
}
void Update(int pos,int val)
{
v[pos]+=val;
for(int i=pos;i<=n;i+=lsb(i))
aib[i]+=val;
}
int Sum(int pos)
{
int rez=0;
for(int i=pos;i>=1;i-=lsb(i))
rez+=aib[i];
return rez;
}
int Query(int val)
{
for(int i=1;i<=n;i++)
if(val == Sum(i))
return i;
return -1;
}
int main()
{
int m; in>>n>>m;
for(int i=1;i<=n;i++)
{
in>>v[i];
Update(i,v[i]);
}
for(int i=1;i<=m;i++)
{
int q;in>>q;
switch (q)
{
case 0:
{
int a,b; in>>a>>b;
Update(a,b);
break;
}
case 1:
{
int a,b;in>>a>>b;
cout<<Sum(b)-Sum(a-1)<<'\n';
break;
}
case 2:
{
int x;in>>x;
out<<Query(x)<<'\n';
break;
}
}
}
return 0;
}