Pagini recente » Cod sursa (job #393002) | Cod sursa (job #3210610) | Cod sursa (job #3195384) | Cod sursa (job #2664900) | Cod sursa (job #2409408)
#include <bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
const string file = "aib";
const ll INF = 9223372036854775807ll;
const int inf = 2147483647, nmax = 100005;
int n, test, aib[nmax];
void update(int pos, int val)
{
while(pos <= n){
aib[pos] += val;
pos += (pos&(-pos));
}
}
int read(int pos)
{
int sum = 0;
while(pos){
sum += aib[pos];
pos -= (pos&(-pos));
}
return sum;
}
int main()
{
ifstream fin (file+".in");
ofstream fout (file+".out");
fin >> n >> test;
for (int i = 1; i <= n; ++i){
int x;
fin >> x;
update(i, x);
}
while(test--){
int t;
fin >> t;
switch(t){
case 0:{
int pos, val;
fin >> pos >> val;
update(pos, val);
break;
}case 1:{
int a, b;
fin >> a >> b;
fout << read(b)-read(a-1) << "\n";
break;
}case 2:{
int lf, st = 1, dr = n, m, ans = -1;
fin >> lf;
for (m = (st+dr)/2; st <= dr; m = (st+dr)/2){
int val = read(m);
if(val == lf){
ans = m;
dr = m-1;
}else if (val < lf)
st = m+1;
else dr = m-1;
}
fout << ans << "\n";
break;
}
}
}
return 0;
}