Pagini recente » Cod sursa (job #1252561) | Cod sursa (job #2373293) | Cod sursa (job #2282651) | Cod sursa (job #2429104) | Cod sursa (job #2159585)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m;
std::vector<int> btree;
std::vector<int> vec;
void update_b_tree(int pos,int val)
{
while(pos <= n)
{
btree[pos] += val;
pos = pos+(pos&(-pos));
}
}
int get_sum(int y)
{
int s = 0;
while(y > 0)
{
s += btree[y];
y -= y&(-y);
}
return s;
}
int get_sum_big(int x,int y)
{
return get_sum(y)-get_sum(x-1);
}
int main()
{
fin>>n>>m;
btree.assign(n+1,0);
int k1;
for(int i=0;i<n;i++)
{
fin>>k1;
vec.push_back(k1);
update_b_tree(i+1,k1);
}
for(int i=0;i<m;i++)
{
int k2,k3;
fin>>k1>>k2;
if(k1 == 0)
{
fin>>k3;
update_b_tree(k2,k3);
vec[k2-1] += k3;
}
else if(k1 == 1)
{
fin>>k3;
fout<<get_sum_big(k2,k3)<<"\n";
}
else if(k1 == 2)
{
int q = 1;
int s = 0;
while(q <= n)
{
s += vec[q-1];
if(s == k2) break;
q++;
}
if(q != n+1 ) fout<<q<<"\n";
else fout<<"-1\n";
}
}
}