Cod sursa(job #155170)

Utilizator gigi_becaliGigi Becali gigi_becali Data 11 martie 2008 19:34:27
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#define maxn 30001


struct nod { int a, b, p;nod(){}; nod(int A, int B, int C){a=A; b=B; p=C;};};

nod x[maxn];
int N;
int n;
int nr[maxn];


inline int max(int a, int b)
{
  if(a>b) return a;
  return b;
}
inline int min(int a, int b)
{
  if(a<b) return a;
  return b;
}

int main()
{
  int m, type,a,i, b, p, A, B,K,mx,mn, v;
  //freopen("bile.in","r",stdin);
  //freopen("bile.out","w",stdout);
  //scanf("%d\n", &n);
 // scanf("%d\n", &m);
 n=30000;
 m=30000;
srand(time(0));
  char ax[256], *t;
  while(m--)
    {
      /*
      gets(ax);
      t=strtok(ax, " ");
      type=atoi(t);
      t=strtok(0, " ");
      a=atoi(t);
      t=strtok(0, " ");
      b=atoi(t);
      t=strtok(0, "\n");
      p=atoi(t);
      */      
      
    type=rand()&1;
    a=rand()%n;
    b=rand()%n;
    p=rand()%30000;
    if(a>b) a^=b^=a^=b;

//    scanf("%d %d %d %d\n", &type,&a, &b, &p);
      
      if(type==1) x[++N]=nod(a, b, p);
      if(type==0)
	{
	  for(i=1;i<=N;++i) nr[x[i].p]=0;
	  for(i=1;i<=N;++i)
	    {
	      A=x[i].a;
	      B=x[i].b;
	      K=x[i].p;
	      
	      // mx=A>?a;
	      //mn=b<?B;
	      mx=max(A, a);
	      mn=min(b, B);
	      if(mn>=mx) nr[K]+=mn-mx+1;
	    }


	  v=0;
	  for(i=1;i<maxn;++i)
	    if(v+nr[i]>=p)break;
	    else v+=nr[i];

	   
	  //memset(nr, 0, sizeof(nr));
	  if(i>=maxn)i=-1;
	  //printf("%d\n", i);


	}

    }


  return 0;
}