Pagini recente » Cod sursa (job #1938459) | Cod sursa (job #35355) | Cod sursa (job #596994) | Cod sursa (job #868093) | Cod sursa (job #1954349)
#include <fstream>
using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
int a[100001];
int n;
int Query(int poz)
{
int s = 0;
for ( int i = poz; i; i -= i & -i)
s += a[i];
return s;
}
void Update(int poz, int v)
{
for ( int i = poz; i <= n; i += i & -i )
a[i] += v;
}
int Search(int x)
{
int st=1,dr=n,mij;
while (st<=dr)
{
mij=(st+dr)/2;
int nr=Query(mij);
if (nr==x) return mij;
if (nr<x) st=mij+1;
else dr=mij-1;
}
return -1;
}
int main()
{
int v, m;
fi >> n >> m; // m - nr de intrebari 0 - update, 1 query
for ( int i = 1; i <= n; ++i )
{
fi >> v;
Update(i, v);
}
int c, p1, p2, x;
for ( int i = 1; i <= m; ++i )
{
fi >> c;
if ( c==0 )
{
fi >> p1 >> v;
Update(p1, v);
}
if (c==1)
{
fi >> p1 >> p2;
fo << Query(p2) - Query(p1 - 1) << '\n';
}
if (c==2)
{
fi>>x;
fo<<Search(x)<<'\n';
}
}
fi.close();
fo.close();
return 0;
}