Pagini recente » Cod sursa (job #689133) | Cod sursa (job #2633834) | Rezultatele filtrării | Cod sursa (job #443228) | Cod sursa (job #2454297)
//check check check
//#include<iostream>
#include<vector>
#include<algorithm>
#include<fstream>
#include<queue>
#include<cstring>
#include<map>
#include<iomanip>
#define ll long long
#define pb(x) push_back(x)
#define zeros(x) ((x^(x-1))&x)
using namespace std;
typedef pair<int,int> ii;
const int NMAX = 1e5+5;
ifstream cin("aib.in");
ofstream cout("aib.out");
int N,M,aib[NMAX];
void add(int x,int quantity)
{
int i;
for(i = x ; i <= N ; i += zeros(i))
aib[i] += quantity;
}
int compute(int x)
{
int i,rez = 0;
for(i = x ; i > 0 ; i -= zeros(i))
rez += aib[i];
return rez;
}
int main()
{
int i,j,x;
cin>>N>>M;
for(i = 1 ; i <= N ; ++i)
{
cin>>x;
add(i , x);
}
for(i = 1 ; i <= M ; ++i)
{
int a,b,c;
cin>>a;
if(a == 0)
cin>>b>>c , add(b , c);
else if(a == 1)
{
cin>>b>>c;
cout<<compute(c) - compute(b-1);
}
else
{
cin>>b;
int step;
for(step = 1 ; step < N ; step<<=1);
for(j = N ; step ; step>>=1)
if(j - step >= 0 && compute(j - step) >= b)
j -= step;
if(compute(j) == b)
cout<<j;
else
cout<<"-1";
}
if(a != 0)
cout<<"\n";
}
return 0;
}