Pagini recente » Cod sursa (job #1982904) | Cod sursa (job #122812) | Cod sursa (job #1682151) | Cod sursa (job #2857159) | Cod sursa (job #170152)
Cod sursa(job #170152)
//Marbles
#include <fstream>
#include <algorithm>
#include <iostream>
using namespace std;
struct Citire{
int c;
int p;
};
int Ordine(Citire i,Citire j){
return (i.p<j.p);
}
int A[65][100011];
char dbg;
int Cautare (int p,int u,int el){
if (p>u) return -1;
int m=(p+u)/2;
if (el==A[0][m]) return m;
if (el<A[0][m]) return Cautare(p,m-1,el);
return Cautare(m+1,u,el);
}
int Cautare2 (int p, int u, int el){
if (p>u) return -1;
int m=(p+u)/2;
if (A[0][m]<=el&&el<A[0][m+1]) return m;
if (el<A[0][m]) return Cautare2(p,m-1,el);
return Cautare2(m+1,u,el);
}
int main(){
Citire B[100001];
ifstream fin("marbles.in");
ofstream fout("marbles.out");
int i,j,C,n,m,x,y,St,Sf,Max;
fin>>n>>m;
for (i=1;i<=n;i++){
fin>>B[i].p>>B[i].c;
}
sort(B+1,B+n+1,Ordine);
for (i=1;i<=n;i++){
A[0][i]=B[i].p;
A[B[i].c][i]=1;
for (j=1;j<=64;j++)
A[j][i]+=A[j][i-1];
}
A[0][0]=-214748364;
A[0][n+1]=214748364;
for (j=1;j<=m;j++){
fin>>C>>x>>y;
if (C==0){
St=Cautare(1,n,x);
A[0][St]=x+y;
}
if (C==1){
Max=-10000;
St=Cautare2(0,n+1,x);
Sf=Cautare2(0,n+1,y);
if (A[0][St]!=x) St++;
for (i=1;i<=64;i++)
if (A[i][Sf]-A[i][St-1]>Max)
Max=A[i][Sf]-A[i][St-1];
fout<<Max<<'\n';
}
}
fout.close();
return 0;
}