楼主,你最后一道题是 N*N的啊 ,你看我写的单调队列的方法可以吗, 没参加笔试 #include <bits/stdc++.h> const int N = 1e5; const int M = 1e9; using namespace std; typedef long long ll; struct node {     int x, val;     bool operator<(const node& n) const     {         return x < n.x;     } }e[N]; int n,k; //数量和 范围 int main() {     cin >> n >> k;     for(int i = 1; i <= n; i++)     {         cin >> e[i].x >> e[i].val;     }     sort(e + 1, e + 1 + n);          deque<int> dq;     int sum = 0;     int max_ = 0;     for(int i = 1; i <= n; i++)     {         while(dq.size() && e[i].x - e[dq.front()].x > 2*k)         {             sum += max_;             dq.pop_front();             max_ = 0;         }         dq.push_back(i);         max_ = max(max_,e[i].val);     }     sum += max_;          cout << sum << endl; }