using System;
using System.Collections.Generic;
public class Test
{
static void Main(string[] args) {
var list = new List<Tuple<DateTime,int>>();
list.Add(Tuple.Create(DateTime.Parse("1/29/2018"), 1));
list.Add(Tuple.Create(DateTime.Parse("1/25/2018"), 2));
list.Add(Tuple.Create(DateTime.Parse("1/20/2018"), 3));
list.Add(Tuple.Create(DateTime.Parse("1/10/2018"), 4));
list.Add(Tuple.Create(DateTime.Parse("1/3/2018"), 5));
Console.WriteLine(~list.BinarySearch(Tuple.Create(DateTime.Parse("1/1/2018"), 0), TupleCompare.Instance)-1);
Console.WriteLine(~list.BinarySearch(Tuple.Create(DateTime.Parse("1/5/2018"), 0), TupleCompare.Instance)-1);
Console.WriteLine(~list.BinarySearch(Tuple.Create(DateTime.Parse("1/28/2018"), 0), TupleCompare.Instance)-1);
Console.WriteLine(~list.BinarySearch(Tuple.Create(DateTime.Parse("2/1/2018"), 0), TupleCompare.Instance)-1);
}
class TupleCompare : IComparer<Tuple<DateTime,int>> {
public static readonly TupleCompare Instance = new TupleCompare();
public int Compare(Tuple<DateTime,int> x, Tuple<DateTime,int> y) {
return -x.Item1.CompareTo(y.Item1);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgdmFyIGxpc3QgPSBuZXcgTGlzdDxUdXBsZTxEYXRlVGltZSxpbnQ+PigpOwogICAgICAgICAgICBsaXN0LkFkZChUdXBsZS5DcmVhdGUoRGF0ZVRpbWUuUGFyc2UoIjEvMjkvMjAxOCIpLCAxKSk7CiAgICAgICAgICAgIGxpc3QuQWRkKFR1cGxlLkNyZWF0ZShEYXRlVGltZS5QYXJzZSgiMS8yNS8yMDE4IiksIDIpKTsKICAgICAgICAgICAgbGlzdC5BZGQoVHVwbGUuQ3JlYXRlKERhdGVUaW1lLlBhcnNlKCIxLzIwLzIwMTgiKSwgMykpOwogICAgICAgICAgICBsaXN0LkFkZChUdXBsZS5DcmVhdGUoRGF0ZVRpbWUuUGFyc2UoIjEvMTAvMjAxOCIpLCA0KSk7CiAgICAgICAgICAgIGxpc3QuQWRkKFR1cGxlLkNyZWF0ZShEYXRlVGltZS5QYXJzZSgiMS8zLzIwMTgiKSwgNSkpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSh+bGlzdC5CaW5hcnlTZWFyY2goVHVwbGUuQ3JlYXRlKERhdGVUaW1lLlBhcnNlKCIxLzEvMjAxOCIpLCAwKSwgVHVwbGVDb21wYXJlLkluc3RhbmNlKS0xKTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUofmxpc3QuQmluYXJ5U2VhcmNoKFR1cGxlLkNyZWF0ZShEYXRlVGltZS5QYXJzZSgiMS81LzIwMTgiKSwgMCksIFR1cGxlQ29tcGFyZS5JbnN0YW5jZSktMSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKH5saXN0LkJpbmFyeVNlYXJjaChUdXBsZS5DcmVhdGUoRGF0ZVRpbWUuUGFyc2UoIjEvMjgvMjAxOCIpLCAwKSwgVHVwbGVDb21wYXJlLkluc3RhbmNlKS0xKTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUofmxpc3QuQmluYXJ5U2VhcmNoKFR1cGxlLkNyZWF0ZShEYXRlVGltZS5QYXJzZSgiMi8xLzIwMTgiKSwgMCksIFR1cGxlQ29tcGFyZS5JbnN0YW5jZSktMSk7CiAgICAgICAgfQoKICAgICAgICBjbGFzcyBUdXBsZUNvbXBhcmUgOiBJQ29tcGFyZXI8VHVwbGU8RGF0ZVRpbWUsaW50Pj4gewogICAgICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFR1cGxlQ29tcGFyZSBJbnN0YW5jZSA9IG5ldyBUdXBsZUNvbXBhcmUoKTsKICAgICAgICAgICAgcHVibGljIGludCBDb21wYXJlKFR1cGxlPERhdGVUaW1lLGludD4geCwgVHVwbGU8RGF0ZVRpbWUsaW50PiB5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gLXguSXRlbTEuQ29tcGFyZVRvKHkuSXRlbTEpOwogICAgICAgICAgICB9CiAgICAgICAgfQp9