网站源码爬取工具/百度竞价账户
知识点:差分
这道题不是很难,但是要注意的地方很多,首先,它说某个点最高,我想当然的就把别的点的高度初始化为那个点减一,这个就错了,某点高度最高,那么可能所有点都是这个高度,不影响它是最高的,然后就是它输入两个点的位置,这个可能大位置在前面,这个需要你去判断一下看是不是要交换,然后就是同一对关系可能多次输入,这个就需要你判断这对关系是不是第一次输入的,还有就是题目保证是合法操作,也就是输入不会有两点分别在最高点两边的情况,总之需要注意的地方很多
#include <bits/stdc++.h>#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;const int N = 1e4 + 5;int a[N], s[N];int main() {int n, p, h, r;cin >> n >> p >> h >> r;for (int i = 1; i <= n; i++) {a[i] = h;s[i] = a[i] - a[i - 1];}map<pa, int> mp;while (r--) {int x, y;cin >> x >> y;if (x > y) swap(x, y);if (mp.find(mk(x, y)) != mp.end()) continue;s[x + 1]--;s[y]++;mp[mk(x, y)] = 1;}for (int i = 1; i <= n; i++) {a[i] = s[i] + a[i - 1];cout << a[i] << endl;}return 0;
}