每次询问,所给的条件为
A B
条件1:h[A] <= h[B]
条件2:同时h[A]>= hi
为了让高度尽可能地高,我们让每头牛的身高都为最大值。
然后,我们按照题目所给信息,来给牛降低身高。
显然,我们只需要对条件2进行操作就好了。
这里使用差分数组。
/*
*@author SunLakeWalk
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <limits.h>
#include <sstream>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <set>
//#pragma GCC optimize(2)
//#pragma GCC optimize(3, "Ofast", "inlin")
using namespace std;
#define ios ios::sync_with_stdio(false) , cin.tie(0)
#define x first
#define y second
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
const int N = 10010, INF = 0x3f3f3f3f, mod = 1e9 + 7, base = 131;
const double eps = 1e-6, PI = acos(-1);
//直接差分数组就ok了
int n, x, y, Q;
int b[N];
unordered_map<int, int> h[N];
void add(int l, int r) {
// b[l] --;
// b[r + 1] ++;
b[l + 1] --;
b[r] ++;
}
void work() {
ios; cin >> n >> x >> y >> Q;
b[1] = y;
while (Q -- ) {
int x, y; cin >> x >> y;
if (x > y) swap(x, y);
if (h[x][y]) continue;
h[x][y] ++;
if (x + 1 <= y) add(x, y);
}
for (int i = 1; i <= n; i ++ ) {
b[i] += b[i - 1];
cout << b[i] << endl;
}
}
int main() {
work();
return 0;
}

京公网安备 11010502036488号