Pagini recente » Cod sursa (job #2895562) | Cod sursa (job #428427) | Cod sursa (job #1424586) | Cod sursa (job #791142) | Cod sursa (job #1630603)
#include<fstream>
using namespace std;
int n, m, i,i2, op, a[100005], x, y, s, p, u, mij;
void update(int poz, int val)
{
for(i2=poz; i2<=n; i2+=(i2&(-i2)))
a[i2]+=val;
}
int query(int poz)
{
s=0;
for(i2=poz; i2>0; i2-=(i2&(-i2)))
s+=a[i2];
return s;
}
ifstream in("aib.in");
ofstream out("aib.out");
int main()
{
in>>n>>m;
for(i=1; i<=n; i++)
{
in>>x;
update(i, x);
}
for(;m--;)
{
in>>op>>x;
if(op==0)
{
in>>y;
update(x, y);
continue;
}
if(op==1)
{
in>>y;
out<<query(y)-query(x-1)<<"\n";
continue;
}
p=1; u=n;
while(p<=u)
{
int mij=p+(u-p)/2;
if(query(mij)>=x)
u=mij-1;
else
p=mij+1;
}
query(p)==x?out<<p<<"\n":out<<"-1\n";
}
return 0;
}