Pagini recente » Cod sursa (job #1818008) | Cod sursa (job #589327) | Cod sursa (job #1096302) | Cod sursa (job #1048860) | Cod sursa (job #1490644)
# include <cstdio>
# include <algorithm>
# include <cstring>
# define MAX (100000 + 5)
# define color (64 + 5)
using namespace std;
long long n, m, T, i, j, aux1, aux2, Max, dif;
long long max_v[MAX], NR[MAX][color], AUX1[color], AUX2[color];
pair <long long, int> A[MAX];
int cautbin(long long poz)
{
int st = 1, dr = n, mij;
bool ok = false;
while (st <= dr)
{
mij = (st + dr) / 2;
if (A[mij].first == poz)
{
ok = true;
break;
}
else if (A[mij].first > poz) dr = mij - 1;
else if (A[mij].first < poz) st = mij + 1;
}
if (ok == true) return mij;
else
{
int i;
for (i = 1; i <= n; i++)
if (A[i].first > poz) return i;
}
}
void sol1()
{
Max = 0;
aux1 = cautbin(i);
aux2 = cautbin(j);
memcpy(AUX1,NR[aux1],sizeof(NR[aux1]));
memcpy(AUX2,NR[aux2],sizeof(NR[aux2]));
int maxy = max (max_v[aux1], max_v[aux2]);
for (j = 1; j <= maxy; j++)
{
dif = AUX2[j] - AUX1[j];
if (A[aux1].second == j) ++dif;
Max = max(Max, dif);
}
if (Max > 0) printf("%lld\n",Max);
else printf("0\n");
}
void sol2()
{
aux1 = cautbin(i);
A[aux1].first = i + j;
}
void ap()
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
NR[i][j] = NR[i-1][j];
NR[i][A[i].second]++;
}
}
int main ()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d %d\n", &n, &m);
for (i = 1; i <= n; i++)
{
scanf("%lld %lld\n", &A[i].first, &A[i].second);
if (A[i].second > Max) Max = A[i].second;
max_v[i] = Max;
}
sort (A + 1, A + n + 1);
ap();
for (int k = 1; k <= m; k++)
{
scanf("%lld %lld %lld\n",&T, &i, &j);
if (T == 1) sol1();
if (T == 0) sol2();
}
return 0;
}