Pagini recente » Cod sursa (job #2080864) | Cod sursa (job #3216948) | Cod sursa (job #629621) | Cod sursa (job #10071) | Cod sursa (job #982414)
Cod sursa(job #982414)
#include<cstdio>
#include<fstream>
#include<algorithm>
#define DIM 100010
using namespace std;
struct bila {
int x;
int c;
};
int n,m,i,j,c,o,in,fin,V[65][DIM],a,maxim,b,p,u,mid;
ifstream f("marbles.in");
ofstream g("marbles.out");
bila v[DIM];
int cmp(bila a, bila b) {
return a.x < b.x;
}
int cauta(int x){
//cauta prima bila cu o coordonata aflata in st sau egala cu x
int u=n,p=1,mid;
while(p<=u){
mid=(p+u)>>1;
if(v[mid].x<=x)
p=mid+1;
else
u=mid-1;
}
return u;
}
int main(){
f>>n>>m;
for(i=1;i<=n;i++){
f>>v[i].x>>v[i].c;
}
sort(v+1, v+n+1, cmp);
for(j=1;j<=64;j++){
for(i=1;i<=n;i++){
if(v[i].c==j)
V[j][i]=V[j][i-1]+1;
else
V[j][i]=V[j][i-1];
}
}
for(i=1;i<=m;i++){
f>>o>>in>>fin;
if(o==0){
//cautam pozitia din sirul de bile a
//bilei aflate la pozitia aflate pe pozitia in
// pe axa reala
p=1;
u=n;
while(p<=u){
mid=(p+u)>>1;
if(v[mid].x==in)
break;
else if(v[mid].x>in)
u=mid-1;
else
p=mid+1;
}
if(p<=u)
v[mid].x+=fin;
}
else{
a=cauta(in-1);
b=cauta(fin);
maxim=0;
for(j=1;j<=64;j++){
if(V[j][b]-V[j][a]>maxim)
maxim=V[j][b]-V[j][a];
}
g<<maxim<<"\n";
}
}
f.close();
g.close();
return 0;
}