#include using namespace std; const int N = 10010; typedef long long LL; map s; LL sum; int n, k; /** 测试用例 6 10 1 2 3 4 5 6 答案: 1 4 */ int main() { cin >> n >> k; int L = INT_MAX, R; // 左右端点 bool found = false; // 是不是找到了 int x; s[0] = 0; for (int i = 1; i <= n; i++) { cin >> x; // 新输入的数据 sum += x; // 总和 auto it = s.find(sum - k); // 查找前缀和为sum-k的元素 if (it != s.end()) { // 如果找到了 L = it->second, R = i; // 记录答案 found = true; } else s[sum] = i; // sum-k 不存在,才会记录sum,换句话说,就是sum是唯一的 } if (found) cout << L + 1 << " " << R << endl; else cout << "No Solution" << endl; return 0; }