Pagini recente » Cod sursa (job #272727) | Cod sursa (job #699574) | Cod sursa (job #979298) | Cod sursa (job #2502203) | Cod sursa (job #3264708)
#include <bits/stdc++.h>
using namespace std;
const int nMax=100005;
int n , m , k , x , y , c , a[nMax] , rez , aib[nMax];
ifstream f("aib.in");
ofstream g("aib.out");
int sum(int a)
{
int rez=0;
for(int i=a;i>=1;i-=i&-i) rez+=aib[i];
}
void add(int a , int val)
{
for(int i=a;i<=n;i+=i&-i) aib[i]+=val;
}
int cb(int a[] , int x)
{
int st=1 , dr=n , rez=0;
while(st<=dr){
int mij=(st+dr)/2;
if(sum(mij)>x) dr=mij-1;
else if(sum(mij)<x) st=mij+1;
else dr=mij-1 , rez=mij;
}
return rez;
}
int main()
{
f >> n >> m;
for(int i=1;i<=n;i++) f >> a[i];
for(int i=1;i<=n;i++){
add(i , a[i]);
}
for(int i=1;i<=m;i++){
f >> c;
if(c==0){
f >> x >> y;
add(y , a[x]-y);
}
if(c==1){
f >> x >> y;
g << sum(y)-sum(x-1);
}
else{
f >> k;
g << cb(a , k);
}
}
}