Scalable Algorithms for Contact Problems