Pagini recente » Cod sursa (job #2346163) | Cod sursa (job #2346656) | Cod sursa (job #2895791) | Cod sursa (job #2974568) | Cod sursa (job #2775192)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 100005;
long long v[NMAX],n,q;
void update(int a,int b)
{
while(a <= n)
{
v[a] += b;
a += a & -a;
}
}
int query(int a)
{
int s = 0;
while(a > 0)
{
s += v[a];
a -= a & -a;
}
return s;
}
int f2(int a, int b)
{
int st = 1,dr = b;
while(st <= dr)
{
int mij = (st + dr) / 2;
int s = query(mij);
if(s == a)
{
return mij;
}
if(s < a)
{
st = mij + 1;
}
else
{
dr = mij - 1;
}
}
return -1;
}
int main()
{
long long a,b,c;
fin>>n>>q;
for(int i = 1;i <= n;i++)
{
fin>>a;
update(i,a);
}
for(int i = 1;i <= q;i++)
{
fin>>c>>a;
if(c == 2)
{
fout<<f2(a,n)<<"\n";
}
else
{
fin>>b;
if(c == 1)
{
fout<<query(b) - query(a - 1)<<"\n";
}
else
update(a, b);
}
}
return 0;
}