Pagini recente » Cod sursa (job #825613) | Cod sursa (job #1628605) | Cod sursa (job #981793) | Cod sursa (job #1971862) | Cod sursa (job #2525632)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[NMAX];
int n,m;
void update(int index,int val)
{
while(index<=n)
{
aib[index]+=val;
index += index & (-index);
}
}
int suma(int index)
{
int sum = 0;
while(index > 0)
{
sum+=aib[index];
index -= index & (-index);
}
return sum;
}
void citire()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
fin>>x;
update(i,x);
}
}
void rezolva()
{
int c;
for(int i=1;i<=m;i++)
{
fin>>c;
if(c==0)
{
int a,b;
fin>>a>>b;
update(a,b);
}
else if(c==1)
{
int a,b;
fin>>a>>b;
if(a > b)
swap(a,b);
fout<<suma(b) - suma(a-1)<<'\n';
}
else
{
int a;
fin>>a;
int ok = 0;
int st = 1;
int dr = n;
//for(int i=1;i<=n;i++)
//fout<<suma(i)<<" ";
//fout<<endl;
while(st <= dr && !ok)
{
int mij = (st + dr)/2;
if(suma(mij) == a)
{
ok=1;
fout<<mij<<'\n';
}
else if(suma(mij) < a)
st = mij+1;
else
dr = mij-1;
}
if(!ok)
fout<<-1<<'\n';
}
}
}
int main()
{
citire();
rezolva();
return 0;
}