Pagini recente » Cod sursa (job #2574235) | Cod sursa (job #1766025) | Cod sursa (job #2077544) | Cod sursa (job #1799673) | Cod sursa (job #607590)
Cod sursa(job #607590)
#include <stdio.h>
#define aib(x) ((x^(x-1))& x)
using namespace std;
const int maxn = 100000;
int n,m;
int array[maxn];
void add(int pos, int amount)
{
for (int i = pos; i<=n; i+=aib(i))
{
array[i] += amount;
}
}
long sum(int count)
{
long sum = 0;
for (int i = count; i > 0; i-=aib(i))
{
sum+=array[i];
}
return sum;
}
int myQuery(int a)
{
int sec = 1;
for (int i = 1; i <= n; ++i)
{
if (array[i] == a)
{
sec = i;
break;
}
}
return sec;
}
int main()
{
freopen("aib.in","r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d%d", &n, &m);
int sec, sec2, sec3;
for (int i = 1; i <= n; ++i)
{
scanf("%d", &sec);
add(i, sec);
}
for (int i = 0; i < m; ++i)
{
scanf("%d", &sec);
if (sec == 2)
{
scanf("%d", &sec2);
printf("%d\n", myQuery(sec2));
}
else
{
if (sec == 0)
{
scanf("%d%d", &sec2, &sec3);
add(sec2, sec3);
}
else
{
scanf("%d%d", &sec2, &sec3);
printf("%ld\n", sum(sec3) - sum(sec2 - 1));
}
}
}
return 0;
}