Pagini recente » Cod sursa (job #2830701) | Cod sursa (job #1354346) | Cod sursa (job #340590) | Cod sursa (job #2667878) | Cod sursa (job #2629359)
#include<bits/stdc++.h>
using namespace std;
#define zeros(x) ((x ^ (x-1)) & x)
ifstream f("aib.in"); ofstream g("aib.out");
int n, m, c, x, y, i, j, k, s1, s2, aib[100005];
void add(int x, int y)
{ for(int i = x; i <= n; i += zeros(i)) aib[i] += y; }
int sum(int x)
{ int s = 0;
for(int i = x; i > 0; i -= zeros(i)) s += aib[i];
return s;
}
int cautbin(int s)
{ int m, temp, st = 1, dr = n;
while(st <= dr)
{ m = (st + dr) / 2;
temp = sum(m);
if(temp == s) return m;
else if(temp > s) dr = m-1;
else st = m + 1;
}
return -1;
}
int main()
{ f>>n>>m;
for(i = 1; i <= n; ++i)
{ f>>x; add(i, x); }
for(i = 1; i <= m; ++i)
{ f>>c>>x;
if(c == 0)
{ f>>y; add(x, y); }
else if(c == 1)
{ f>>y;
g<<sum(y) - sum(x-1)<<'\n';
}
else g<<cautbin(x)<<'\n';
}
return 0;
}