Pagini recente » Cod sursa (job #2796474) | Cod sursa (job #295072) | Cod sursa (job #1619820) | Cod sursa (job #1185754) | Cod sursa (job #771548)
Cod sursa(job #771548)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef struct {
int coord;
int culoare;
int x[65];
} lol;
int N, M;
lol v[100005];
ifstream fin ("marbles.in");
inline int cmp (lol a, lol b) {
return (a.coord < b.coord);
}
void Citire () {
fin >> N >> M;
for (int i = 0; i < N; i++)
{
fin >> v[i].coord >> v[i].culoare;
}
sort (v, v + N, cmp);
v[0].x[v[0].culoare] = 1;
for (int i = 1; i < N; i++)
{
memcpy (v[i].x, v[i - 1].x, sizeof (v[i - 1].x));
v[i].x[v[i].culoare]++;
}
}
int B_Search (int val) {
int i, step = 1 << 20;
for (i = 0; step; step >>= 1)
if (i + step < N && v[i + step].coord <= val) i += step;
return i;
}
void Business () {
ofstream fout ("marbles.out");
int a, b, c, dog, dog2, mare;
for (int i = 0; i < M; i++)
{
fin >> a >> b >> c;
if (a)
{
mare = 0;
dog = B_Search (b);
if (v[dog].coord < b) dog++;
dog2 = B_Search (c);
for (int u = 1; u <= 64; u++)
{
mare = max (mare, v[dog2].x[u] - v[dog - 1].x[u]);
}
fout << mare << "\n";
}
else
{
dog = B_Search (b);
v[dog].coord += c;
}
}
fin.close ();
fout.close ();
}
int main () {
Citire ();
Business ();
return 0;
}