Pagini recente » Cod sursa (job #1735819) | Cod sursa (job #1519993) | Cod sursa (job #1557830) | Cod sursa (job #594321) | Cod sursa (job #1668626)
#include <iostream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
#include <numeric>
#include <cstring>
#include <string>
#include <queue>
#include <set>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <map>
#define pb push_back
#define mp make_pair
#define INF numeric_limits<int>::max()
#define lsb(x) (-x)&x
#define int64 long long
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n;
vector<int> bit;
void update(int pos,int val)
{
for(int i=pos;i<=n;i+=lsb(i))
bit[i]+=val;
}
int sum(int pos)
{
int s=0;
for(int i=pos;i>0;i-=lsb(i))
s+=bit[i];
return s;
}
int query(int val)
{
int left=1,right=n,mid=(left+right)/2;
while(left<=right)
{
mid=(left+right)/2;
if(sum(mid)==val)
return mid;
else if(sum(mid)>val)
right=mid-1;
else
left=mid+1;
}
return -1;
}
int main()
{
int q;
in>>n>>q;
bit=vector<int> (n+1);
for(int i=1;i<=n;i++)
{
int x;
in>>x;
update(i,x);
}
for(;q;q--)
{
int t,x,y;
in>>t;
if(t==0)
{
in>>x>>y;
update(x,y);
}
else if(t==1)
{
in>>x>>y;
out<<sum(y)-sum(x-1)<<'\n';
}
else{
in>>x;
out<<query(x)<<'\n';
}
}
return 0;
}