Pagini recente » Cod sursa (job #1844682) | Cod sursa (job #56775) | Cod sursa (job #2626746) | Cod sursa (job #2826691) | Cod sursa (job #694202)
Cod sursa(job #694202)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
struct punct {int p,c;} zero;
punct a[100100];
int n,m;
int s[100100][65];
struct cmp
{
inline bool operator()(const punct &a,const punct &b) const
{
return (a.p<b.p);
}
};
inline int bs(int poz)
{
int i=1,cnt=1<<20;
for(;cnt>0;cnt>>=1)
{
if(i+cnt<=n)
{
if(a[i+cnt].p<=poz) i+=cnt;
}
}
return i;
}
int main()
{
ifstream in("marbles.in");
ofstream out("marbles.out");
in>>n>>m;
for(int i=1;i<=n;++i)
{
in>>a[i].p>>a[i].c;
}
sort(a+1,a+n+1,cmp());
for(int i=1;i<=n;++i)
{
memcpy(s[i],s[i-1],sizeof(s[i-1]));
++s[i][a[i].c];
}
for(int i=1;i<=n;++i)
{
cout<<a[i].p<<' '<<a[i].c<<'\n';
}
cout<<'\n';
for(int i=1;i<=m;++i)
{
int q,x,y;
in>>q>>x>>y;
if(q==0)
{
//memcpy(s[x+y],s[x],sizeof(s[x]));
//memset(s[x],0,sizeof(s[x]));
int pz=bs(x);
a[pz].p=x+y;
cout<<"\n\n";
cout<<pz<<' '<<x<<' '<<y<<"\n\n\n";
}
else
{
int l1=bs(x-1),l2=bs(y);
cout<<l1<<' '<<l2<<'\n';
cout<<x<<' '<<y<<'\n';
int sol=0;
for(int j=0;j<=64;++j)
{
if(sol<s[l2][j]-s[l1][j])
{
sol=s[l2][j]-s[l1][j];
}
}
out<<sol<<'\n';
}
}
out.close();
return 0;
}