| 记录编号 |
460296 |
评测结果 |
AAAAAAAAAW |
| 题目名称 |
2848.obc |
最终得分 |
90 |
| 用户昵称 |
Bennettz |
是否通过 |
未通过 |
| 代码语言 |
C++ |
运行时间 |
0.174 s |
| 提交时间 |
2017-10-16 20:15:02 |
内存使用 |
2.58 MiB |
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 100005
struct Node{
int x,y;
bool operator <(const Node&b)const{
if(x!=b.x)return x<b.x;
else return y<b.y;
}
}a[maxn],b[maxn];
int s=0,l[maxn],r[maxn],ans=0,ma;
int main(){
freopen("obc.in","r",stdin);
freopen("obc.out","w",stdout);
int n,k,l1;
scanf("%d%d%d",&n,&k,&l1);
if(!k){
printf("0");
return 0;
}
for(int i=0;i<n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
b[i].x=a[i].y,b[i].y=a[i].x;
}
sort(a,a+n);
int x=1;l[0]=1;
for(int i=1;i<n;i++){
if(a[i].x!=a[i-1].x){
s--;
while(s<i-1){
r[s]=i-s-1,s++;
}
s++,x=1;
}
else{
while(a[i].y-a[s].y>l1){
r[(s++)-1]=x--;
}
x++;
l[i]=x;
}
}
s--;
while(s<n){
r[s]=n-s-1,s++;
}
if(k==1){
for(int i=0;i<n;i++){
ans=max(ans,l[i]);
}
}
else{
ma=0;
for(int i=0;i<n;i++){
ma=max(ma,l[i]);
ans=max(ans,ma+r[i]);
}
}
sort(b,b+n);
s=0,x=1;
for(int i=0;i<n;i++){
// printf("%d %d\n",a[i].x,a[i].y);
}
x=1;l[0]=1;
for(int i=1;i<n;i++){
if(b[i].x!=b[i-1].x){
s--;
while(s<i-1){
r[s]=i-s-1,s++;
}
s++,x=1;
}
else{
while(b[i].y-b[s].y>l1){
r[(s++)-1]=x--;
}
x++;
l[i]=x;
}
}
s--;
while(s<n){
r[s]=n-s-1,s++;
}
if(k==1){
for(int i=0;i<n;i++){
ans=max(ans,l[i]);
}
}
else{
ma=0;
for(int i=0;i<n;i++){
ma=max(ma,l[i]);
ans=max(ans,ma+r[i]);
}
}
printf("%d",ans);
return 0;
}