Pagini recente » Cod sursa (job #837797) | Cod sursa (job #1161134) | Cod sursa (job #2153871) | Cod sursa (job #1984130) | Cod sursa (job #919406)
Cod sursa(job #919406)
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef struct {
int coord;
int culoare;
} lol;
int N, M;
lol v[100005];
int sol[100005][65];
char pars[50];
ifstream fin ("marbles.in");
inline int cmp (lol a, lol b) {
return (a.coord < b.coord);
}
void Citire () {
fin >> N >> M;
int u, pff;
fin.getline (pars, 10);
for (int i = 0; i < N; i++)
{
fin.getline (pars, 48);
u = 0;
pff = 1;
if (pars[0] == '-') u++, pff = -1;
for (; pars[u] >= '0' && pars[u] <= '9'; u++)
{
v[i].coord = v[i].coord * 10 + pff * (pars[u] - '0');
}
u++;
for (; pars[u] >= '0' && pars[u] <= '9'; u++)
{
v[i].culoare = v[i].culoare * 10 + pars[u] - '0';
}
}
sort (v, v + N, cmp);
sol[0][v[0].culoare] = 1;
for (int i = 1; i < N; i++)
{
memcpy (sol[i], sol[i - 1], sizeof (sol[i - 1]));
sol[i][v[i].culoare]++;
}
}
inline 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, y, pff;
for (int i = 0; i < M; i++)
{
fin.getline (pars, 40);
a = pars[0] - '0';
b = 0;
c = 0;
pff = 1;
y = 2;
if (pars[2] == '-') pff = -1, y++;
for (; pars[y] >= '0' && pars[y] <= '9'; y++)
b = b * 10 + pff * (pars[y] - '0');
y++;
pff = 1;
if (pars[y] == '-') pff = -1, y++;
for (; pars[y] >= '0' && pars[y] <= '9'; y++)
c = c * 10 + pff * (pars[y] - '0');
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, sol[dog2][u] - sol[dog - 1][u]);
}
fout << mare << "\n";
}
else
{
dog = B_Search (b);
v[dog].coord += c;
}
}
fin.close ();
fout.close ();
}
int main () {
Citire ();
Business ();
return 0;
}