Pagini recente » Cod sursa (job #28694) | Cod sursa (job #1037273) | Cod sursa (job #2423861) | Cod sursa (job #867463) | Cod sursa (job #613658)
Cod sursa(job #613658)
#include <fstream>
#include <vector>
#define DIM 101000
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, q, tip;
int aib[DIM];
void Read();
void Update(int poz, int val);
int Query(int poz);
int Binar(int);
int main()
{
Read();
int a, b;
for (int i = 1; i <= q; ++i)
{
fin >> tip;
if (!tip)
{
fin >> a >> b;
Update(a, b);
}
if (tip == 1)
{
fin >> a >> b;
if (a > b) swap(a,b);
fout << Query(b) - Query(a-1) << '\n';
}
if (tip == 2)
{
fin >> a;
fout << Binar(a) << '\n';
}
}
fin.close();
fout.close();
return 0;
}
void Update (int poz, int val)
{
for (int i = poz; i <= n; i += (i & -i))
aib[i] += val;
}
int Query(int poz)
{
int sum = 0;
for (int i = poz; i; i -= (i & -i))
sum += aib[i];
return sum;
}
void Read()
{
fin >> n >> q;
int val;
for (int i = 1; i <= n; ++i)
{
fin >> val;
Update(i, val);
}
}
int Binar(int sum)
{
int st(1), dr(n), mij;
while (st <= dr)
{
mij = (st + dr) / 2;
int Q = Query(mij);
if (Q == sum) return mij;
if (Q > sum) dr = mij - 1;
if (Q < sum) st = mij + 1;
}
return -1;
}