Pagini recente » Cod sursa (job #2380503) | Cod sursa (job #1591231) | Cod sursa (job #2482960) | Cod sursa (job #1904913) | Cod sursa (job #3166299)
#include <bits/stdc++.h>
using namespace std;
#define cin fin
#define cout fout
ifstream fin("aib.in");
ofstream fout("aib.out");
int main()
{
int n,q;
cin>>n>>q;
vector<int> v(n),aib(n+3);
for(int i=0;i<n;i++)
{
cin>>v[i];
for(int p=i;p<n;p|=p+1)
aib[p] += v[i];
}
for(int i=0;i<q;i++)
{
int c;
cin>>c;
if(c==0)
{
int poz,val;
cin>>poz>>val;
--poz;
for(int p=poz;p<n;p|=p+1)
aib[p] += val;
}
else if(c==1)
{
int st,dr;
cin>>st>>dr;
--st;
--dr;
int s2=0,s1=0;
for(int p=dr;p>=0;p = (p&(p+1))-1)
s2 += aib[p];
for(int p=st-1;p>=0;p = (p&(p+1))-1)
s1 += aib[p];
cout<<s2-s1<<'\n';
}
else
{
int val;
cin>>val;
int st = 0, dr = n-1;
while(st<dr)
{
int mij = (st+dr)>>1;
int nr = 0;
for(int p=mij;p>=0;p = (p&(p+1))-1)
nr += aib[p];
if(nr < val)
st = mij+1;
else if(nr > val) dr = mij-1;
else
{
st = mij;
break;
}
}
int nr = 0;
for(int p=st;p>=0;p = (p&(p+1))-1)
{nr += aib[p];
if(p==0) break;}
if(nr==val)
cout<<st+1<<'\n';
else
cout<<-1<<'\n';
}
}
return 0;
}