Pagini recente » Cod sursa (job #1896433) | Cod sursa (job #2767303) | Cod sursa (job #2676314) | Cod sursa (job #72609) | Cod sursa (job #1796097)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
typedef unsigned int uint;
main() {
ifstream cin("aib.in");
ofstream cout("aib.out");
uint n, m, k;
cin>>n>>m;
k = ceil(sqrt(n))+2;
vector<uint> a(n), b(ceil(n/k)+1);
fill(a.begin(), a.end(), 0);
fill(b.begin(), b.end(), 0);
for (uint i = 0; i < n; i++) {
cin>>a[i];
b[i/k]+=a[i];
}
uint op, x, y;
for (uint i = 0; i < m; i++) {
cin>>op;
if (op == 0) {
cin>>x>>y;
x--;
a[x] += y;
b[x/k] += y;
}
if (op == 1) {
cin>>x>>y;
x--;
uint s = 0;
uint j = x;
while (j<y && j%k>0) {
s+=a[j];
j++;
}
while (j+k<y) {
s+=b[j/k];
j+=k;
}
while (j<y) {
s+=a[j];
j++;
}
cout<<s<<"\n";
}
if (op == 2) {
cin>>x;
uint s = 0;
uint j = 0;
while (j+k<a.size() && s+b[j/k] <= x) {
s+=b[j/k];
j+=k;
}
while (j<a.size() && s+a[j] <= x) {
s+=a[j];
j++;
}
while (j>0 && a[j-1] == 0) {
j--;
}
if (j >= a.size()) {
j = a.size()-1;
}
if (s == x) {
cout<<j<<"\n";
} else {
cout<<-1<<"\n";
}
}
}
}