Pagini recente » Cod sursa (job #1942551) | Cod sursa (job #2531713) | Cod sursa (job #1529604) | Cod sursa (job #983068) | Cod sursa (job #1442638)
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int a[1000005];
int n, m;
void update(int poz, int val)
{
while(poz <= n){
a[poz] += val;
poz += poz&(-poz);
}
}
int query(int poz)
{
int sum = 0;
while(poz){
sum += a[poz];
poz -= poz&(-poz);
}
return sum;
}
int look(int val)
{
int st = 1, dr = n, mid, poz = -1, sum;
mid = (st+dr)/2;
while(st <= dr)
{
sum = query(mid);
if(sum > val){
dr = mid - 1;
}
if(sum < val){
st = mid + 1;
}
if(sum == val){
poz = mid;
dr = mid - 1;
}
mid = (st + dr)/2;
}
g<<poz<<"\n";
}
int main()
{
int i, val, op, poz, j, s;
f>>n>>m;
for(i=1; i<=n; i++){
f>>val;
update(i, val);
}
while(m--)
{
f>>op;
if(op==0){
f>>poz>>val;
update(poz, val);
}
if(op==1){
f>>i>>j;
s = query(j) - query(i-1);
g<<s<<"\n";
}
if(op==2){
f>>val;
look(val);
}
}
return 0;
}