Pagini recente » Cod sursa (job #193659) | Cod sursa (job #96437) | Cod sursa (job #1895500) | Cod sursa (job #1386621) | Cod sursa (job #2519311)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("marbles.in");
ofstream fout ("marbles.out");
int n, m, x, y, maxcul, sol, cerinta, st, dr;
int d[65][200005];
pair <int, int> v[200005];
void cautBin (int i, int j){
int st, dr, mid;
st = 1, dr = n;
while (st <= dr){
mid = st + (dr - st)/2;
if (v[mid].first > i){
dr = mid - 1;
}
if (v[mid].first < i){
st = mid + 1;
}
if (v[mid].first == i){
v[mid].first = i + j;
}
}
}
int poz (int a){
int st, dr, mid;
st = 1, dr = n;
while (st <= dr){
mid = st + (dr - st)/2;
if (v[mid].first < a){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
return st;
}
int main(){
fin >> n >> m;
for (int i=1; i<=n; i++){
fin >> x >> y;
v[i] = {x, y};
maxcul = max (maxcul, y);
}
sort (v + 1, v + n + 1);
for (int i=1; i<=n; i++){
for (int j=1; j<=maxcul; j++){
d[j][i] = d[j][i-1] + (v[i].second == j);
}
}
for (int i=1; i<=m; i++){
fin >> cerinta >> x >> y;
if (cerinta == 0){
cautBin (x, y);
}
else{
st = poz (x) - 1, dr = poz (y+1) - 1;
sol = 0;
for (int j=1; j<=maxcul; j++){
sol = max (sol, d[j][dr] - d[j][st]);
}
fout << sol << "\n";
}
}
return 0;
}