import graph;

real f(real x) {return x^3-x+2;}
pair F(real x) {return (x,f(x));}

void rectangle(real a, real b, real c, real h(real,real))
{
  real height=(a < c && c < b) ? f(c) : h(f(a),f(b));
  pair p=(a,0), q=(b,height);
  path g=box(p,q);
  fill(g,lightgray);
  draw(g);
}

void partition(real a, real b, real c, real h(real,real))
{
  rectangle(a,a+.4,c,h);
  rectangle(a+.4,a+.6,c,h);
  rectangle(a+.6,a+1.2,c,h);
  rectangle(a+1.2,a+1.6,c,h);
  rectangle(a+1.6,a+1.8,c,h);
  rectangle(a+1.8,b,c,h);

  draw((a,0)--(F(a)));
  draw((b,0)--(F(b)));

  draw(graph(f,a,b,operator ..),red);
  draw((a,0)--(b,0));
  labelx("$a$",a);
  labelx("$b$",b);
}
