Pagini recente » Cod sursa (job #3273892) | Cod sursa (job #973458) | Cod sursa (job #548921) | Cod sursa (job #702482) | Cod sursa (job #2954811)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100010;
int n,q,A[N];
int suma(int p)
{
int val=0;
for(int i=p;i>0;i-=i&(-i))
val+=A[i];
return val;
}
void upd(int p,int val)
{
for(int i=p;i<=n;i+=i&(-i))
A[i]+=val;
}
int main()
{
f>>n>>q;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
upd(i,x);
}
for(;q;q--)
{
int tip;
f>>tip;
if(tip==0)
{
int poz,val;
f>>poz>>val;
upd(poz,val);
}
else if(tip==1)
{
int st,dr;
f>>st>>dr;
g<<suma(dr)-suma(st-1)<<'\n';
}
else
{
int s;
f>>s;
int lo,hi,mi;
lo=0;
hi=n;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(suma(mi)<s)
lo=mi;
else
hi=mi;
}
if(suma(hi)==s)
g<<hi<<'\n';
else
g<<"-1\n";
}
}
return 0;
}
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
// x x x x x x x x x x x x x
// x x x x x x x x x x x x x x
// x x x x x x x x x x x x
// x x x x x x x x x x x x x x x x
// x x x x x x x x x x x x x x x x
//
// 16+2+1
//
// 10011 19
// 10010 18
// 10000 16
// 00000 0
//
// 10010 18+2
// 10100 20+4
// 11000 24+8
// 32 !!!
//
// 9 +1
// 10 +2
// 12 +4
// 16 +16
// 32!!!
//
//
//
// celMaiMicBit(x) = x&(-x) !!!!!
//
//
//
//