結果
| 問題 |
No.568 じゃんじゃん 落とす 委員会
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-05-20 21:59:04 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,137 bytes |
| コンパイル時間 | 3,410 ms |
| コンパイル使用メモリ | 287,368 KB |
| 実行使用メモリ | 15,524 KB |
| 最終ジャッジ日時 | 2025-05-20 21:59:14 |
| 合計ジャッジ時間 | 6,917 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 WA * 16 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
#define mid (l+r)/2
int n,m;
struct node{
int a,b,id;
}c[N];
bool cmp(node x,node y){
if(x.a==y.a) return x.b<y.b;
return x.a>y.a;
}
struct tree{
int sum[N<<2][2];
inline void pushup(int u,int id){
sum[u][id]=sum[u<<1][id]+sum[u<<1|1][id];
}
void update(int u,int l,int r,int x,int d,int id){
if(l==r){
sum[u][id]+=d;
return;
}
if(x<=mid) update(u<<1,l,mid,x,d,id);
else update(u<<1|1,mid+1,r,x,d,id);
pushup(u,id);
return;
}
int query(int u,int l,int r,int k,int id){//kth biggest
if(l==r) return l;
if(sum[u<<1|1][id]>=k) return query(u<<1|1,mid+1,r,k,id);
return query(u<<1,l,mid,k-sum[u<<1|1][id],id);
}
int query(int u,int l,int r,int ql,int qr,int id){
if(ql<=l&&r<=qr) return sum[u][id];
if(qr<l||r<ql) return 0;
return query(u<<1,l,mid,ql,qr,id)+query(u<<1|1,mid+1,r,ql,qr,id);
}
inline void add(node x){
update(1,1,n,x.a,1,0);
update(1,0,1e5,x.b,1,1);
//cout<<x.b<<"++\n";
}
inline void del(node x){
update(1,1,n,x.a,-1,0);
update(1,0,1e5,x.b,-1,1);
//cout<<x.b<<"--\n";
}
}x[4];
int ans=N;
inline void calc(){
int s=x[2].sum[1][0]+x[3].sum[1][0];
int t=N;
if(s<m){
if(x[1].sum[1][0]<m-s){
//cout<<"break\n";
return;
}
t=x[1].query(1,1,n,m-s,0);
}
ans=min(ans,x[3].sum[1][1]+x[2].query(1,0,1e5,t,1e5,1));
/*
cout<<"s= "<<s<<" t= "<<t<<" ans= "<<ans<<"\n";
for(int i:{0,1,2,3}) cout<<x[i].sum[1][0]<<" ";
cout<<"\n";
for(int i=0;i<=11;i++){
for(int j=1;j<=x[1].query(1,0,1e5,i,i,1);j++) cout<<i<<" ";
}
cout<<"\n";
for(int i=0;i<=11;i++){
for(int j=1;j<=x[2].query(1,0,1e5,i,i,1);j++) cout<<i<<" ";
}
cout<<"\n";
*/
return;
}
signed main(){
//freopen("difficulty.in","r",stdin);
//freopen("difficulty.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>c[i].id>>c[i].a>>c[i].b;
x[c[i].id].add(c[i]);
}
sort(c+1,c+1+n,cmp);
calc();
for(int i=n;i>=1;i--){
if(c[i].id<3){
x[c[i].id].del(c[i]);
x[c[i].id+1].add(c[i]);
}
if(c[i].a!=c[i+1].a) calc();
}
calc();
cout<<ans<<"\n";
return 0;
}