Pagini recente » Cod sursa (job #833287) | Cod sursa (job #2916215) | Cod sursa (job #1437102) | Cod sursa (job #2974122) | Cod sursa (job #1162673)
#include <fstream>
#include <algorithm>
using namespace std;
struct data {
int x;
int c;
} v[100005];
int m,n,i,j,a,b,st,dr,mid,op,Max;
int d[70][100005];
bool cmp(const data &a, const data &b) {
return a.x<b.x;
}
int main() {
ifstream f("marbles.in");
ofstream g("marbles.out");
f>>n>>m;
for(i=1;i<=n;i++)
f>>v[i].x>>v[i].c;
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++)
for(j=1;j<=64;j++)
if(j==v[i].c)
d[j][i]=d[j][i-1]+1;
else
d[j][i]=d[j][i-1];
while(m--) {
f>>op>>i>>j;
if(op==0) {
st=1;dr=n;
while(st<=dr) {
mid=(st+dr)/2;
if(v[mid].x<i)
st=mid+1;
else
dr=mid-1;
}
v[st].x+=j;
}
else {
st=1;dr=n;
while(st<=dr) {
mid=(st+dr)/2;
if(v[mid].x<i)
st=mid+1;
else
dr=mid-1;
}
a=dr;
st=1;dr=n;
while(st<=dr) {
mid=(st+dr)/2;
if(v[mid].x<=j)
st=mid+1;
else
dr=mid-1;
}
b=dr;
Max=0;
for(i=1;i<=64;i++)
if(Max<d[i][b]-d[i][a])
Max=d[i][b]-d[i][a];
g<<Max<<"\n";
}
}
return 0;
}