結果
| 問題 | No.568 じゃんじゃん 落とす 委員会 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2025-05-21 11:27:06 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 62 ms / 1,000 ms |
| コード長 | 1,610 bytes |
| 記録 | |
| コンパイル時間 | 1,642 ms |
| コンパイル使用メモリ | 184,024 KB |
| 実行使用メモリ | 7,808 KB |
| 最終ジャッジ日時 | 2026-05-29 02:31:49 |
| 合計ジャッジ時間 | 4,289 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
#include<bits/stdc++.h>
#define int long long
#define inf 0x3f3f3f3f3f3f3f3f
#define N 100005
using namespace std;
int n,m;
struct po{
int x,a,b;
}num[N];
int idx[N],idy[N];
bool cmpx(int x,int y)
{
return num[x].a>num[y].a;
}
bool cmpy(int x,int y)
{
return num[x].b<num[y].b;
}
signed main()
{
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&num[i].x,&num[i].a,&num[i].b);
idx[i]=i;idy[i]=i;
}
sort(idx+1,idx+1+n,cmpx);
sort(idy+1,idy+1+n,cmpy);
int l=100001,r=0,Cntb=0,Cntc=0,Ans=inf;
for(int i=1;i<=n;i++)
{
num[i].x++;
if(num[i].x>2)
{
Cntb++;
Cntc++;
}
else if(num[i].x==2)
Cntb++;
}
int ida=1,idb=1;
// printf("%lld %lld %lld %lld\n",l,r,Cntb,Cntc);
if(Cntb>=m)
Ans=min(Ans,Cntc);
while(Cntb>=m&&r<=100001)
{
while(num[idy[idb]].b==r)
{
if(num[idy[idb]].x==2)
Cntb--;
else if(num[idy[idb]].x==3)
Cntc--;
num[idy[idb]].x--;
idb++;
}
r++;
// printf("%lld %lld %lld %lld\n",l,r,Cntb,Cntc);
if(Cntb>=m)
Ans=min(Ans,Cntc);
}
while(l--)
{
while(num[idx[ida]].a==l)
{
num[idx[ida]].x++;
if(num[idx[ida]].x==2)
Cntb++;
else if(num[idx[ida]].x==3)
Cntc++;
ida++;
}
// printf("%lld %lld %lld %lld\n",l,r,Cntb,Cntc);
if(Cntb>=m)
Ans=min(Ans,Cntc);
while(Cntb>=m&&r<=100001)
{
while(num[idy[idb]].b==r)
{
if(num[idy[idb]].x==2)
Cntb--;
else if(num[idy[idb]].x==3)
Cntc--;
num[idy[idb]].x--;
idb++;
}
r++;
// printf("%lld %lld %lld %lld\n",l,r,Cntb,Cntc);
if(Cntb>=m)
Ans=min(Ans,Cntc);
}
}
printf("%lld\n",Ans);
return 0;
}
vjudge1