Pagini recente » Cod sursa (job #1518014) | Cod sursa (job #1764382) | Cod sursa (job #2479829) | Cod sursa (job #391466) | Cod sursa (job #2218858)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define NMAX 100001
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m;
int AIB[NMAX] = { 0 };
void Add(int index, int value)
{
for (index; index <= n; index++)
{
AIB[index] += value;
}
}
int BinarySearch(int value)
{
int index = 0;
int left = 1, right = n, middle;
while (left <= right)
{
middle = (left + right) / 2;
if (value == AIB[middle])
{
return middle;
}
(value < AIB[middle]) ? (right = middle - 1) : (left = middle + 1);
}
return -1;
}
void Read(void)
{
int prop;
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
fin >> AIB[i];
AIB[i] += AIB[i - 1];
}
int a, b, operation , index;
for (int j = 0; j < m; j++)
{
fin >> operation;
if (operation == 2)
{
fin >> a;
}
else
{
fin >> a >> b;
}
switch (operation)
{
case 0:
Add(a, b);
break;
case 1:
fout << AIB[b] - AIB[a - 1] << '\n';
break;
case 2:
fout << BinarySearch(a) << '\n';
break;
}
}
}
int main(void)
{
Read();
return 0;
}