Pagini recente » Cod sursa (job #1911840) | Cod sursa (job #2678891) | Cod sursa (job #1644751) | Cod sursa (job #123931) | Cod sursa (job #2193791)
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int N=100000;
int sum[N+1],n;
inline int lsb(int a)
{
return a&-a;
}
void update(int pos,int val)
{
for(; pos<=n; pos+=lsb(pos))
sum[pos]+=val;
}
int suma(int pos)
{
int rez=0;
for(; pos>0; pos-=lsb(pos))
rez+=sum[pos];
return rez;
}
int cautbin(int val)
{
int r=0,pas=1<<20;
while(pas)
{
if(r+pas<=n&&val-sum[r+pas]>=0)
{
r+=pas;
val-=sum[r];
if(val==0)
return r;
}
pas/=2;
}
return -1;
}
int main()
{
int q,i,sau,a,b,x;
in>>n>>q;
for(i=1; i<=n; i++)
{
in>>x;
update(i,x);
}
for(i=1; i<=q; i++)
{
in>>sau>>a;
if(sau!=2)
in>>b;
if(sau==0)
update(a,b);
else if(sau==1)
out<<suma(b)-suma(a-1)<<'\n';
else
out<<cautbin(a)<<'\n';
}
return 0;
}