离散化


自定义 unique 函数

#include 
using namespace std;
#define all(x) x.begin(), x.end()
#define fi first
#define pb push_back
#define PII pair 
#define se second
const int N = 3e5 + 10;
int n, m, a[N], s[N];
vector  add, q;
vector  num;
int find(int x){
	int l = 0, r = num.size() - 1;
	while (l < r){
		int mid = l + r >> 1;
		if (num[mid] >= x) r = mid;
		else l = mid + 1;
	}
	return r + 1;
}
vector  :: iterator unique(vector  &a){
	int j = 0;
	for (int i = 0; i < a.size(); i++)
		if (!i || a[i] != a[i - 1])
			a[j++] = a[i];
	return a.begin() + j;
}
void solve(){
	cin >> n >> m;
	for (int i = 0; i < n; i++){
		int x, c;
		scanf("%d%d", &x, &c);
		num.pb(x);
		add.pb({x, c});
	}
	for (int i = 0; i < m; i++){
		int l, r;
		scanf("%d%d", &l, &r);
		q.pb({l, r});
		num.pb(l);
		num.pb(r);
	}
	sort(all(num));
	num.erase(unique(num), num.end());
	for (auto x : add){
		int t = find(x.fi);
		a[t] += x.se;
	}
	for (int i = 1; i <= num.size(); i++) s[i] = s[i - 1] + a[i];
	for (auto x : q){
		int l = find(x.fi), r = find(x.se);
		cout << s[r] - s[l - 1] << "\n";
	}
}
int main(){
	solve();
	return 0;
}

调用内置 unique 函数

#include 
using namespace std;
#define all(x) x.begin(), x.end()
#define fi first
#define pb push_back
#define PII pair 
#define se second
const int N = 3e5 + 10;
int n, m, a[N], s[N];
vector  add, q;
vector  num;
int find(int x){
	int l = 0, r = num.size() - 1;
	while (l < r){
		int mid = l + r >> 1;
		if (num[mid] >= x) r = mid;
		else l = mid + 1;
	}
	return r + 1;
}
void solve(){
	cin >> n >> m;
	for (int i = 0; i < n; i++){
		int x, c;
		scanf("%d%d", &x, &c);
		num.pb(x);
		add.pb({x, c});
	}
	for (int i = 0; i < m; i++){
		int l, r;
		scanf("%d%d", &l, &r);
		q.pb({l, r});
		num.pb(l);
		num.pb(r);
	}
	sort(all(num));
	num.erase(unique(all(num)), num.end());
	for (auto x : add){
		int t = find(x.fi);
		a[t] += x.se;
	}
	for (int i = 1; i <= num.size(); i++) s[i] = s[i - 1] + a[i];
	for (auto x : q){
		int l = find(x.fi), r = find(x.se);
		cout << s[r] - s[l - 1] << "\n";
	}
}
int main(){
	solve();
	return 0;
}

题目模板: https://www.acwing.com/problem/content/804/