Cod sursa(job #1877055)
Utilizator | Data | 12 februarie 2017 21:18:35 | |
---|---|---|---|
Problema | Marbles | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.18 kb |
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("marbles.in");
ofstream out("marbles.out");
int i,x,y,m,n,w[65],v[65][100001],a,b,st,dr,mid,z,t,j,maxim,d;
int main(){
in>>n>>m;
for( i = 1; i <= n; i ++ ){
in >> x;
in >> y;
w[y]++;
v[ y ][ w[y] ]=x;
}
for(i=1;i<=64;i++){
sort(v[i]+1,v[i]+w[i]+1);
}
for( j = 1; j <= m; j ++ ){
in >> t >> a >> b;
maxim=0;
if( t == 0 ){
for(i=1;i<=64;i++){
st=1;
dr=w[i];
while(st<=dr){
mid=(st+dr)/2;
if(v[i][mid] == a){
z=mid;
break;
}
if( v[i][mid] < a){
st=mid+1;
}
else{
dr=mid-1;
}
}
if(v[i][z] == a){
v[i][z]=a+b;
break;
}
}
}
if( t == 1 ){
for(i=1;i<=64;i++){
st=1; dr=w[i];
while( st <= dr ){
mid=(st+dr)/2;
if(v[i][mid]<a){
st=mid+1;
}
else{
dr=mid-1;
}
}
x=st;
st=1; dr=w[i];
while( st <= dr ){
mid=(st+dr)/2;
if(v[i][mid]<=b){
st=mid+1;
}
else{
dr=mid-1;
}
}
y=dr;
d=y-x+1;
if(d>maxim){
maxim=d;
}
}
out<<maxim<<"\n";
}
}
return 0;
}