#include #include std::map valleys; int height_at(int x){ auto i1 = valleys.lower_bound(x); if(i1 != valleys.begin()) i1 --; auto i2 = valleys.lower_bound(x); if(i2 == valleys.end()) i2 --; auto i3 = valleys.upper_bound(x); if(i2 == valleys.end()) i2 --; int h1 = i1->second + std::abs(x - i1->first); int h2 = i2->second + std::abs(i2->first - x); int h3 = i3->second + std::abs(i3->first - x); return std::min(h1, std::min(h2, h3)); } int main(){ int N, Q; std::cin >> N >> Q; valleys[1] = 0; for(int q = 0, mode, x, c; q < Q; ++q){ std::cin >> mode >> x; if(mode == 1){ std::cout << height_at(x) << std::endl; } else{ std::cin >> c; if(c < height_at(x)){ valleys[x] = c; for(auto itr = std::next(valleys.find(x)); itr != valleys.end();){ if(height_at(itr->first) < itr->second){ itr = valleys.erase(itr); } else break; } for(auto itr = std::prev(valleys.find(x)); itr != valleys.begin(); --itr){ if(height_at(itr->first) < itr->second){ itr = valleys.erase(itr); } else break; } } } } }