每一个x 的位置不会相同
a 数组 保存下每个机械臂的行号,up 和 dn 数组保存每个传送带的可以获得物资的上界和下界
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <cctype>
#include <stack>
#include <sstream>
#include <list>
#include <map>
#include <assert.h>
#define debug() puts("************")
#define MS(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> P;
const int INF = 0x3f3f3f3f;
const double inf = 1e20;
const double PI = 3.1415926535;
const double eps = 1e-15;
const LL mod = 1e9+7;
const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};
const int maxn = 200000 + 7, maxd = 100000 + 7;;
int n, m;
int a[maxd];
int dn[maxn];
int up[maxn];
void init() {
int x, y;
memset(a, 0, sizeof a);
for(int i = 0; i < m; ++i) {
scanf("%d %d", &x, &y);
a[x] = y;
}
for(int i = 1; i <= n; ++i) {
up[i] = dn[i] = i;
}
}
void solve() {
for(int i = 0; i <= 100000; ++i) {
int id = a[i];
if(id) {
up[id] = up[id+1] = min(up[id], up[id+1]);
dn[id] = dn[id+1] = max(dn[id], dn[id+1]);
}
}
printf("%d", dn[1]-up[1]+1);
for(int i = 2; i <= n; ++i) {
printf(" %d", dn[i]-up[i]+1);
}
puts("");
}
int main() {
scanf("%d %d", &n, &m);
init();
solve();
return 0;
}