Pagini recente » Cod sursa (job #911748) | Cod sursa (job #896652) | Cod sursa (job #1294775) | Istoria paginii runda/simulare_oji_11_12_3 | Cod sursa (job #1471271)
#include <cstdio>
#include <algorithm>
#define F first
#define S second
#define last_bit(x) (x&(-x))
using namespace std;
const int Nmax = 100010;
int n , m , i;
int dp[64][Nmax];
pair < int , int > info[Nmax];
int search_(int val)
{
int i , step;
for (step = 1; step < n; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= n && info[i+step].F < val)
i += step;
return i;
}
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
scanf("%d %d", &info[i].F, &info[i].S),
info[i].S--;
sort(info + 1 , info + n + 1);
for (int cul = 0; cul < 64; ++cul)
for (i = 1; i <= n; ++i)
dp[cul][i] = dp[cul][i-1] + (info[i].S == cul);
for ( ; m ; --m)
{
int tip , left , right;
scanf("%d %d %d", &tip, &left, &right);
if (tip == 0)
{
info[search_(left)+1].F += right;
}
else
{
int c = right;
left = search_(left);
right = search_(right) + 1;
if (right > n || info[right].F > c)
right--;
int ans = 0;
for (int cul = 0; cul < 64; ++cul)
ans = max(ans , dp[cul][right] - dp[cul][left]);
printf("%d\n", ans);
}
}
return 0;
}