1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| const int N=600010,M=N*2,mod=1e9+7; int n,m,k,a[N],l[N],r[N],pos[N]; struct BIT{ #define lowbit(x) ((x)&(-x)) int tr[N],n; void resize(int _n){n=_n;} inline void add(int x,int d){for(;x<=n;x+=lowbit(x)) tr[x]+=d;} inline int ask(int x){int ans=0;for(;x;x-=lowbit(x)) ans+=tr[x];return ans;} }T;
void solve(){ n=read(),m=read(); rep(i,1,n) l[i]=r[i]=i,pos[i]=m+i; T.resize(n+m+2); rep(i,1,n) T.add(i+m,1); for(int i=m;i>=1;--i){ int x=read(); l[x]=1; int pl=pos[x]; int num=T.ask(pl); r[x]=max(r[x], num); T.add(pl,-1); pos[x]=i; T.add(i, 1); } for(int i=1;i<=n;++i){ int pl=pos[i]; int num=T.ask(pl); r[i]=max(r[i], num); } rep(i,1,n) printf("%d %d\n",l[i],r[i]); }
|