Pagini recente » Cod sursa (job #2613829) | Cod sursa (job #303883) | Cod sursa (job #2932112) | Cod sursa (job #2809785) | Cod sursa (job #2805719)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int aib[100005];
int n,m;
int x;
int p;
int a,b,k;
void create_aib() {
f >> n >> m;
for (int i=1;i<=n;i++) {
f >> x;
for (int j=i;j<=n;j += (j&-j)) {
aib[j] += x;
}
}
}
void add(int a, int val) {
for (int i=a;i<=n; i += (i&-i)) {
aib[i] += val;
}
}
int sum(int a) {
int sm=0;
for (int i=a;i>0; i -= (i&-i)) {
sm += aib[i];
}
return sm;
}
int pozmin(int a) {
int mask,poz=0;
for (mask=1;mask<=n;mask*=2);
mask /= 2;
while (mask!=0) {
if (poz+mask<=n) {
if (a>=aib[poz+mask]) {
a -= aib[poz+mask];
poz += mask;
if (a==0) {
return poz;
}
}
}
mask /= 2;
}
return -1;
}
void solve() {
if (p==0) {
f >> a >> b;
add(a,b);
}
else if (p==1) {
f >> a >> b;
g << sum(b) - sum(a-1) << '\n';
}
else {
f >> a;
g << pozmin(a) << '\n';
}
}
int main()
{
create_aib();
for (int o=1;o<=m;o++) {
f >> p;
solve();
}
return 0;
}