Pagini recente » Cod sursa (job #2587217) | Cod sursa (job #469692) | Cod sursa (job #2628834) | Cod sursa (job #3145050) | Cod sursa (job #1211960)
#include<fstream>
using namespace std;
int a[100009],i,j,k,x,y,n,m;
ifstream cin("aib.in");
ofstream cout("aib.out");
void update(int poz, int u)
{
while (poz<=n)
{
a[poz]+=u;
poz+=(poz&(-poz));
}
}
int suma(int poz)
{
int sol=0;
while (poz>=1)
{
sol+=a[poz];
poz-=(poz&(-poz));
}
return sol;
}
int search(int x)
{
int right=n;
int left=1;
while (left <=right)
{
int mijl=(left+right)/2;
int s=suma(mijl);
if (s==x) return mijl;
else
if (s>x) right=mijl-1;
else left=mijl+1;
}
return -1;
}
int main()
{
cin>>n>>m;
for (i=1; i<=n ; i++) {
cin>>x;
update(i,x);
}
for (i=1 ; i<=m ; i++)
{
cin>>k;
if (k==0) {
cin>>x>>y;
update(x,y);
}
if (k==1) {
cin>>x>>y;
cout<<suma(y)-suma(x-1)<<"\n";
}
if (k==2) {
cin>>x;
cout<<search(x)<<"\n";
}
}
cin.close();
cout.close();
return 0;
}