Pagini recente » Cod sursa (job #1089651) | Cod sursa (job #2906269) | Cod sursa (job #1206026) | Cod sursa (job #2164961) | Cod sursa (job #2276861)
#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;
}
inline bool check (int nr , int val){
return (best (nr) == val);
}
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 && check (pas + found , a))
found += pas;
pas /= 2;
}
g << found << '\n';
}
}
return 0;
}