Pagini recente » Cod sursa (job #525439) | Cod sursa (job #2683572) | Cod sursa (job #2263693) | Cod sursa (job #1289478) | Cod sursa (job #630318)
Cod sursa(job #630318)
#include<cstdio>
using namespace std;
int n, m;
int v[100001], sum[100001];
inline void add(const int &a, const int &b) {
int i;
v[a] += b;
for(i = a; i <= n; i++) sum[i] += b;
}
inline int CautareBinara(const int &st, const int &dr, const int &x)
{
int m = (st + dr) / 2;
if(st > dr) return -1;
if(sum[m] == x) return m;
if(sum[m] < x) return CautareBinara(m + 1, dr, x);
if(sum[m] > x) return CautareBinara(st, m - 1, x);
return -1;
}
int main() {
int i, x, a, b;
freopen("aib.in", "r", stdin), freopen("aib.out", "w", stdout);
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) {
scanf("%d", v + i);
sum[i] = sum[i - 1] + v[i];
}
for(i = 1; i <= m; i++) {
scanf("%d", &x);
switch(x) {
case 0:
scanf("%d %d", &a, &b);
add(a, b);
break;
case 1:
scanf("%d %d", &a, &b);
printf("%d\n", sum[b] - sum[a - 1]);
break;
case 2:
scanf("%d", &a);
printf("%d\n", CautareBinara(1, n, a));
break;
}
}
return 0;
}