using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Test
{
public static void Main()
{
var values = (new[] { 9, 9, 15, 15, 15, 30, 9 }).Select((x, i) => new { x, i });
var query = from v in values
let firstNonValue = values.Where(v2 => v2.i >= v.i && v2.x != v.x).FirstOrDefault()
let grouping = firstNonValue == null ? int.MaxValue : firstNonValue.i
group v by grouping into v
select new
{
From = v.Min(y => y.i) + 1,
To = v.Max(y => y.i) + 1,
Value = v.Min(y => y.x)
};
var result = query.ToArray();
foreach (var x in result)
{
Console.WriteLine("From: {0}\tTo: {1}\tValue: {2}", x.From, x.To, x.Value);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwogCnB1YmxpYyBjbGFzcyBUZXN0CnsKICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICAgICAgewogICAgICAgICAgICB2YXIgdmFsdWVzID0gKG5ld1tdIHsgOSwgOSwgMTUsIDE1LCAxNSwgMzAsIDkgfSkuU2VsZWN0KCh4LCBpKSA9PiBuZXcgeyB4LCBpIH0pOwogCiAgICAgICAgdmFyIHF1ZXJ5ID0gZnJvbSB2IGluIHZhbHVlcwogICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdE5vblZhbHVlID0gdmFsdWVzLldoZXJlKHYyID0+IHYyLmkgPj0gdi5pICYmIHYyLnggIT0gdi54KS5GaXJzdE9yRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwaW5nID0gZmlyc3ROb25WYWx1ZSA9PSBudWxsID8gaW50Lk1heFZhbHVlIDogZmlyc3ROb25WYWx1ZS5pCiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgdiBieSBncm91cGluZyBpbnRvIHYKICAgICAgICAgICAgICAgICAgICBzZWxlY3QgbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBGcm9tID0gdi5NaW4oeSA9PiB5LmkpICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgVG8gPSB2Lk1heCh5ID0+IHkuaSkgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9IHYuTWluKHkgPT4geS54KQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9IHF1ZXJ5LlRvQXJyYXkoKTsKIAogICAgICAgIGZvcmVhY2ggKHZhciB4IGluIHJlc3VsdCkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJGcm9tOiB7MH1cdFRvOiB7MX1cdFZhbHVlOiB7Mn0iLCB4LkZyb20sIHguVG8sIHguVmFsdWUpOwogICAgICAgIH0KICAgICAgICB9Cn0=