Pagini recente » Cod sursa (job #1619207) | Cod sursa (job #2350318) | Cod sursa (job #3260974) | Cod sursa (job #2046548) | Cod sursa (job #1471251)
#include <cstdio>
#include <vector>
#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];
vector < pair < int , int > > info;
int main()
{
freopen("marbles.in","r",stdin);
freopen("marbles.out","w",stdout);
scanf("%d %d", &n, &m);
info = vector < pair < int , int > > (n);
for (i = 0 ; i < n; ++i)
scanf("%d %d", &info[i].F, &info[i].S),
info[i].S--;
sort(info.begin() , info.end());
for (int cul = 0; cul < 64; ++cul)
for (i = 1; i <= n; ++i)
dp[cul][i] = dp[cul][i-1] + (info[i-1].S == cul);
for ( ; m ; --m)
{
int tip , left , right;
scanf("%d %d %d", &tip, &left, &right);
if (tip == 0)
{
auto ind = lower_bound(info.begin() , info.end() , make_pair(left , 0));
ind -> F += right;
}
else
{
left = lower_bound(info.begin() , info.end() , make_pair(left , 0)) - info.begin();
right = lower_bound(info.begin() , info.end() , make_pair(right , 0)) - info.begin() + 1;
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;
}