Pagini recente » Cod sursa (job #2783446) | Cod sursa (job #1796684) | Cod sursa (job #356640) | Monitorul de evaluare | Cod sursa (job #1607072)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100003];
int n,m;
void add(int poz, int a) {
for(int i = poz+1; i < n; i++)
aib[i] += a;
}
int bin(int st, int dr, int a) {
int mij = (st+dr)/2;
if(st > dr)
return -2;
if(aib[mij] < a)
return bin(mij+1, dr, a);
else if(aib[mij] > a)
return bin(st, mij-1, a);
return mij;
}
int main() {
in >> n >> m;
for(int i = 0; i < n; i++)
in >> aib[i];
for(int i = 1; i < n; i++)
aib[i] += aib[i-1];
int t,a,b;
for(int i = 0; i < m; i++) {
in >> t;
if(t == 0) {
in >> a >> b;
add(a-1,b);
} else if(t == 1) {
in >> a >> b;
out << aib[b-1]-aib[a-2] << '\n';
} else if(t == 2) {
in >> a;
out << bin(0, n-1, a)+1 << '\n';
}
}
return 0;
}