Pagini recente » Cod sursa (job #2887364) | Cod sursa (job #815748) | Cod sursa (job #324743) | Cod sursa (job #3178364) | Cod sursa (job #2276871)
#include <fstream>
#define zeros(x) x&(-x)
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
int const NM = 1e5;
int v [1 + NM] , aib [1 + NM] , n;
inline void add (int pos , int nr){
for(int i = pos ; i <= n ; i += zeros(i))
aib [i] += nr;
}
inline int best (int pos){
int ans = 0 ;
for(int i = pos ; i ; i -= zeros(i))
ans += aib [i];
return ans;
}
int main()
{
int q;
f >> n >> q;
for(int i = 1 ; i <= n ; ++ i){
int a;
f >> a;
add (i , a);
}
for(int i = 1 ; i <= q ; ++ i){
int a , b , p;
f >> p;
if (p == 2)
f >> a;
else
f >> a >> b;
if (! p)
add (a , b);
if (p == 1)
g << best (b) - best (-1 + a) << '\n';
if (p == 2){
int pas = (1 << 16) , found = 0;
while (pas){
if (pas + found <= n && best (pas + found) < a)
found += pas;
pas /= 2;
}
if (best (1 + found) == a)
g << 1 + found << '\n';
else
g << -1 << '\n';
}
}
return 0;
}