Problem p03033 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
typedef pair<int, P> PPI;
typedef pair<LL, LL> PL;
typedef long long LL;
// LLONG_MIN, INT_MIN
#define xx first
#define yy second

int n, q;
vector<vector<int>> vp;
// int seg[810000];
// void build(int id=1, int l=0, int r = n){
//   if(l==r-1){
//     seg[id] = da[l];
//   }
//   int mid = (l+r)/2;
//   build(id*2, l, mid);
//   build(id*2+1,mid, r);
//   s[id] = max(s[id*2],s[id*2+1]);
// }
// void mx(int x, int y, int id=1, int l=0, int r = n){
//   if(x>=r||y<=l) return -1;
//   if(l>=x&&r<=y)return seg[id];
//   int mid = (l+r)/2;
//   return max(mx(x,y,id*2,l,mid),mx(x,y,id*2+1,mid, r));
// }

vector<P> in, out;
int main() {
  // freopen("input", "r", stdin);
  // freopen("output", "w", stdout);
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> q;
  for (int i = 0; i < n; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    in.push_back({a - c, c});
    out.push_back({b - c, c});
  }
  sort(in.begin(), in.end());
  sort(out.begin(), out.end());
  int idi = 0, ido = 0;
  vector<P> vq;
  vector<int> ans(n);
  for (int i = 0; i < q; i++) {
    int t;
    cin >> t;
    vq.push_back({t, i});
  }
  sort(vq.begin(), vq.end());
  multiset<int> ms;
  for (int i = 0; i < q; i++) {
    // cout<<vq[i].xx<<"kkkkk"<<vq[i].yy<<endl;
    while (idi < in.size() && in[idi].xx <= vq[i].xx)
      ms.insert(in[idi++].yy);
    while (ido < out.size() && out[ido].xx <= vq[i].xx)
      ms.erase(ms.find(out[ido++].yy));
    // cout<<ms.size()<<endl;
    if (ms.size()) {
      ans[vq[i].yy] = *ms.begin();
    } else
      ans[vq[i].yy] = -1;
  }
  // cout<<"================="<<endl;
  for (int i = 0; i < q; i++)
    cout << ans[i] << endl;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
typedef pair<int, P> PPI;
typedef pair<LL, LL> PL;
typedef long long LL;
// LLONG_MIN, INT_MIN
#define xx first
#define yy second

int n, q;
vector<vector<int>> vp;
// int seg[810000];
// void build(int id=1, int l=0, int r = n){
//   if(l==r-1){
//     seg[id] = da[l];
//   }
//   int mid = (l+r)/2;
//   build(id*2, l, mid);
//   build(id*2+1,mid, r);
//   s[id] = max(s[id*2],s[id*2+1]);
// }
// void mx(int x, int y, int id=1, int l=0, int r = n){
//   if(x>=r||y<=l) return -1;
//   if(l>=x&&r<=y)return seg[id];
//   int mid = (l+r)/2;
//   return max(mx(x,y,id*2,l,mid),mx(x,y,id*2+1,mid, r));
// }

vector<P> in, out;
int main() {
  // freopen("input", "r", stdin);
  // freopen("output", "w", stdout);
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n >> q;
  for (int i = 0; i < n; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    in.push_back({a - c, c});
    out.push_back({b - c, c});
  }
  sort(in.begin(), in.end());
  sort(out.begin(), out.end());
  int idi = 0, ido = 0;
  vector<P> vq;
  vector<int> ans(q);
  for (int i = 0; i < q; i++) {
    int t;
    cin >> t;
    vq.push_back({t, i});
  }
  sort(vq.begin(), vq.end());
  multiset<int> ms;
  for (int i = 0; i < q; i++) {
    // cout<<vq[i].xx<<"kkkkk"<<vq[i].yy<<endl;
    while (idi < in.size() && in[idi].xx <= vq[i].xx)
      ms.insert(in[idi++].yy);
    while (ido < out.size() && out[ido].xx <= vq[i].xx)
      ms.erase(ms.find(out[ido++].yy));
    // cout<<ms.size()<<endl;
    if (ms.size()) {
      ans[vq[i].yy] = *ms.begin();
    } else
      ans[vq[i].yy] = -1;
  }
  // cout<<"================="<<endl;
  for (int i = 0; i < q; i++)
    cout << ans[i] << endl;
}