Pagini recente » Cod sursa (job #2030637) | Cod sursa (job #1409247) | Cod sursa (job #1788947) | Cod sursa (job #957956) | Cod sursa (job #2870907)
#include <fstream>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int aib[100005];
int n, m, p;
void update (int poz, int val)
{
for(int i=poz; i<=n; i += (i & (-i)))
aib[i]+=val;
}
int query (int poz)
{
int ans=0;
for(int i=poz; i>=1; i-= (i & (-i)))
ans += aib[i];
return ans;
}
int google(int val)
{
int ans = 0, s=0;
for(int i = p; i>=1; i >>= 1)
if((ans+i <= n) && (s + aib[ans+i] <= val))
ans+=i, s+=aib[ans];
if(s == val && ans != 0)
return ans;
else
return -1;
}
int main()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
{
int x;
fin>>x;
update(i, x);
}
p=1;
while(p*2 <= n)
p*=2;
for(int i=1; i<=m; i++)
{
int op, x, y;
fin>>op;
if(op==0)
{
fin>>x>>y;
update(x, y);
}
if(op==1)
{
fin>>x>>y;
fout<<query(y)-query(x-1)<<'\n';
}
if(op==2)
{
fin>>x;
fout<<google(x)<<'\n';
}
}
return 0;
}