const int N=300010; int n,m; int a[N],s[N]; vector<int> alls; vector<PII> add,query; //定义两个PII 一个存操作c 一个存给的l r
int find(int x) // 找到第一个大于等于x的位置 { int l = 0, r = alls.size()-1; while (l < r) { int mid = l + r >> 1; if (alls[mid] >= x) r = mid; else l = mid + 1; } return r+1; 本题是映射到从1开始 因为要用到前缀和 }
int main() { ios::sync_with_stdio(false); cin>>n>>m; for(int i=0;i<n;i++) { int x,c; cin>>x>>c; add.push_back({x,c}); alls.push_back(x);//待离散化的值 } for(int i=0;i<m;i++) { int l,r; cin>>l>>r; query.push_back({l,r}); //注意pair类型插入需要大括号 alls.push_back(l); alls.push_back(r);//将l r存入待离散化数组 } sort(alls.begin(),alls.end());//排序 alls.erase(unique(alls.begin(),alls.end()),alls.end());//去重