mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
da5da8ec9f
3100-3199
73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#include<cstdio>
|
|
#include<cstring>
|
|
#include<algorithm>
|
|
using namespace std;
|
|
const int MAXN =10000+100;
|
|
int a[MAXN];
|
|
int dmin[MAXN][20];
|
|
void initMin(int n,int d[])
|
|
{
|
|
for(int i=0; i<=n; i++)dmin[i][0]=d[i];
|
|
for(int j=1; (1<<j)<=n; j++)
|
|
for(int i=1; i+(1<<j)-1<=n; i++)
|
|
dmin[i][j] = min(dmin[i][j-1] , dmin[i+(1<<(j-1))][j-1]);
|
|
}
|
|
int getMin(int L,int R)
|
|
{
|
|
int k=0;
|
|
while((1<<(k+1))<=R-L+1)k++;
|
|
return min(dmin[L][k] , dmin[R-(1<<k)+1][k]);
|
|
}
|
|
struct node
|
|
{
|
|
int p,d;
|
|
bool operator <(const node &b)const
|
|
{
|
|
return p<b.p || (p==b.p && d<b.d);
|
|
}
|
|
} node1[MAXN],node2[MAXN];
|
|
int main()
|
|
{
|
|
int n;
|
|
while(scanf("%d",&n)==1&&n)
|
|
{
|
|
for(int i =0; i<=10000+100; i++)
|
|
a[i]=1000000;
|
|
for(int i=1; i<=n; i++)
|
|
{
|
|
int p,d;
|
|
scanf("%d%d",&p,&d);
|
|
p++;
|
|
d++;
|
|
node1[i].p=p;
|
|
node1[i].d=d;
|
|
a[p] = min(a[p],d);
|
|
}
|
|
initMin(MAXN,a);
|
|
int cnt=0;
|
|
for(int i=1; i<=n; i++)
|
|
{
|
|
int p,d;
|
|
p = node1[i].p;
|
|
d = node1[i].d;
|
|
if(p==1)
|
|
{
|
|
node2[++cnt] =node1[i];
|
|
}
|
|
else
|
|
{
|
|
int d_min = getMin(1,p-1);
|
|
if(d<=d_min)
|
|
{
|
|
node2[++cnt] =node1[i];
|
|
}
|
|
}
|
|
}
|
|
sort(node2+1,node2+1+cnt);
|
|
printf("%d\n",cnt);
|
|
for(int i=1; i<=cnt; i++)
|
|
printf("%d %d\n",node2[i].p-1,node2[i].d-1);
|
|
}
|
|
return 0;
|
|
}
|