#include #include using namespace std; struct ConvexHullTrick{ std::deque > dq; //(傾き、切片) void add(long long a, long long b){ std::pair p0=std::make_pair(a, b); while(dq.size()>=2){ int sz=dq.size(); std::pair p1=dq[sz-1]; std::pair p2=dq[sz-2]; if((p0.second-p1.second)*(p0.first-p2.first) > (p0.second-p2.second)*(p0.first-p1.first))break;//交点のx座標を比較 dq.pop_back(); } dq.push_back(p0); } long long query(long long x){ while(dq.size()>=2){ long long v1=dq[0].first*x+dq[0].second; long long v2=dq[1].first*x+dq[1].second; if(v1>=v2)break; dq.pop_front(); } return dq[0].first*x+dq[0].second; } }; int main() { long long a; cin >> a; int Q; cin >> Q; ConvexHullTrick cht; while (Q--){ int T; cin >> T; if (T == 1){ long long s, t; cin >> s >> t; long long b = a * (t * t - s * s); b /= t - s; long long c = s * (a * s - b); cht.add(b, c); } if (T == 2){ long long t; cin >> t; long long c = cht.query(t) - a * t * t; cout << max(0LL, c) << '\n'; } } }