Pagini recente » Cod sursa (job #2135115) | Cod sursa (job #1632615) | Cod sursa (job #2879146) | Cod sursa (job #2231294) | Cod sursa (job #3154204)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("marbles.in");
ofstream cout ("marbles.out");
pair <int , short> bile[100001];
int aparitii[65][100001];
int main ()
{
int numar_bile , numar_operatii;
cin >> numar_bile >> numar_operatii;
for (int indice = 1 ; indice <= numar_bile ; indice++)
cin >> bile[indice].first >> bile[indice].second;
sort(bile + 1 , bile + numar_bile + 1);
for (int indice_1 = 1 ; indice_1 <= numar_bile ; indice_1++)
{
for (int indice_2 = 1 ; indice_2 <= 64 ; indice_2++)
aparitii[indice_2][indice_1] = aparitii[indice_2][indice_1 - 1];
aparitii[bile[indice_1].second][indice_1]++;
}
for (int indice = 1 , tip ; indice <= numar_operatii ; indice++)
{
cin >> tip;
if (!tip)
{
int coordonata , termen;
cin >> coordonata >> termen;
int stanga = 1 , dreapta = numar_bile;
while (stanga <= dreapta)
{
const int mijloc = (stanga + dreapta) >> 1;
if (bile[mijloc].first == coordonata)
{ bile[mijloc].first += termen; break; }
if (bile[mijloc].first < coordonata)
stanga = mijloc + 1;
else
dreapta = mijloc - 1;
}
}
else
{
int inceput , sfarsit;
cin >> inceput >> sfarsit;
int stanga = 1 , dreapta = numar_bile , pozitie_stanga = 1;
while (stanga <= dreapta)
{
const int mijloc = (stanga + dreapta) >> 1;
if (bile[mijloc].first >= inceput)
{ dreapta = mijloc - 1; pozitie_stanga = mijloc; }
else
stanga = mijloc + 1;
}
int pozitie_dreapta = 0;
stanga = 1; dreapta = numar_bile;
while (stanga <= dreapta)
{
const int mijloc = (stanga + dreapta) >> 1;
if (bile[mijloc].first <= sfarsit)
{ stanga = mijloc + 1; pozitie_dreapta = mijloc; }
else
dreapta = mijloc - 1;
}
if (inceput <= bile[pozitie_stanga].first && bile[pozitie_stanga].first <= sfarsit)
{
int maxim = 0;
for (int culoare = 1 ; culoare <= 64 ; culoare++)
maxim = max(maxim , aparitii[culoare][pozitie_dreapta] - aparitii[culoare][pozitie_stanga - 1]);
cout << maxim << '\n';
}
else
cout << "0\n";
}
}
cout.close(); cin.close();
return 0;
}