Pagini recente » Cod sursa (job #586609) | Cod sursa (job #1911185) | Cod sursa (job #3267855) | Cod sursa (job #3218227) | Cod sursa (job #2516777)
#include <fstream>
#define dim 100001
using namespace std;
int n, m, i, a, b, t;
int A[dim];
ifstream fin ("aib.in");
ofstream fout ("aib.out");
void update (int i, int a)
{
for (;i<=n;i+=i&-i) {
A[i]+=a;
}
}
int query (int x)
{
int sum=0;
for(; x > 0; x -= x&-x)
sum += A[x];
return sum;
}
int cautbin (int x)
{
int st=1, dr=n;
while (st<=dr) {
int mid = (st+dr)/2;
if (query(mid)==x)
return mid;
if (query(mid)<=x)
st=mid+1;
else
dr=mid-1;
}
return -1;
}
int main () {
fin>>n>>m;
for (i=1;i<=n;i++) {
fin>>a;
update(i, a);
}
for (i=1;i<=m;i++) {
fin>>t;
if (t==0) {
fin>>a>>b;
update(a, b);
} else if (t==1) {
fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
} else if (t==2) {
fin>>a;
fout<<cautbin(a)<<"\n";
}
}
return 0;
}