Pagini recente » Cod sursa (job #3005651) | Cod sursa (job #2402254) | Cod sursa (job #1743279) | Cod sursa (job #2504495) | Cod sursa (job #969119)
Cod sursa(job #969119)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("marbles.in");
ofstream g("marbles.out");
int n,m;
struct bile{
int x;
int c;
int v[70];
};
bile a[100013];
inline int cmp(bile a,bile b){
return (a.x<b.x);
}
inline int seek(int x){
int p=1,u=n,mij;
while(p<=u){
mij=p+(u-p)/2;
if(a[mij].x==x)
return mij-1;
else if(a[mij].x>x)
u=mij-1;
else
p=mij+1;
}
return p-1;
}
int main(void){
register int i,j,t,cmax=0,p,u,x,y;
f>>n>>m;
for(i=1;i<=n;i++){
f>>a[i].x>>a[i].c;
if(cmax<a[i].c)
cmax=a[i].c;
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++){
for(j=1;j<=cmax;j++)
a[i].v[j]=a[i-1].v[j];
a[i].v[a[i].c]++;
}
int maxim;
for(;m>0;m--){
f>>t>>x>>y;
//cautam prima si ultima bila din intervalul [x;y]
if(t==1){
p=seek(x);
u=seek(y);
maxim=0;
for(i=1;i<=cmax;i++){
if(a[u].v[i]-a[p].v[i]>maxim)
maxim=a[u].v[i]-a[p].v[i];
}
g<<maxim<<"\n";
}
else if(t==0){
p=seek(x)+1;
a[p].x+=y;
}
}
return 0;
}