Pagini recente » Cod sursa (job #1456691) | Cod sursa (job #1544886) | Cod sursa (job #1035398) | Cod sursa (job #1724494) | Cod sursa (job #1535853)
#include <fstream>
using namespace std;
int aib[100001] , v[100001],n;
int query(int p)
{
int s=0;
while(p!=0)
{
s+=aib[p];
p-=(p&-p);
}
return s;
}
void update(int p , int val)
{
while(p<=n)
{
aib[p]+=val;
p+=(p&-p);
}
}
int bin(int val)
{
int i,pas;
i=0;
pas=1<<16;
while(pas!=0)
{
if(i+pas<=n&&aib[i+pas]<=val)
{
i+=pas;
val-=aib[i];
}
pas/=2;
}
return i;
}
ifstream in ("aib.in");
ofstream out ("aib.out");
int main()
{
int i , m ,poz=0 , val=0 , tip ;
in >> n >> m;
for(i=1; i<=n; i++)
{
in >> v[i];
update(v[i] , i);
}
for(i=1; i<=m; i++)
{
in >> tip ;
if(tip==0)
{
in >> poz >> val;
update(poz , val);
out << '\n';
}
if(tip == 1)
{
in >> poz >> val;
out << query(val)-query(poz-1) << '\n';
}
if(tip==2)
{
in >> val;
out << bin(val) << '\n';
}
}
return 0;
}