結果
| 問題 |
No.2220 Range Insert & Point Mex
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-02-17 22:48:46 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,678 bytes |
| コンパイル時間 | 2,863 ms |
| コンパイル使用メモリ | 208,392 KB |
| 最終ジャッジ日時 | 2025-02-10 17:46:41 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 15 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int i=0;i<int(n);i++)
int dat_sz=1<<18;
vector<ll> dat(dat_sz*2,1e18);
void SGset(int k,ll v){
k+=dat_sz;
dat.at(k)=v;
}
void SGadd(int a,int b,ll ad,int k=1,int x=0,int y=dat_sz){
if(y<=a||b<=x) return;
if(a<=x&&y<=b) {
dat.at(k)=min(dat.at(k),ad);
return;
}
int md=(x+y)/2;
SGadd(a,b,ad,k*2,x,md);
SGadd(a,b,ad,k*2+1,md,y);
}
ll SGget(int k){
k+=dat_sz;
ll ans=1e18;
while(k>0){
ans=min(ans,dat.at(k));
k/=2;
}
return ans;
}
int main(){
int n;
cin>>n;
vector<int> l(n),r(n),a(n);
rep(i,n) cin>>l.at(i)>>r.at(i)>>a.at(i);
int q;
cin>>q;
vector<int> x(q);
rep(i,q) cin>>x.at(i);
vector<int> nl(n),nr(n);
rep(i,n){
nl.at(i)=lower_bound(x.begin(),x.end(),l.at(i))-x.begin();
nr.at(i)=upper_bound(x.begin(),x.end(),r.at(i))-x.begin();
}
vector<int> pr(n);
rep(i,n) pr.at(i)=i;
sort(pr.begin(),pr.end(),[&](int i,int j){
return a.at(i)<a.at(j);
});
vector<pair<int,int>> st;
int nw=0;
for(int i:pr){
if(nw<a.at(i)){
sort(st.begin(),st.end());
int str=0;
for(auto p:st){
if(str<p.first) SGadd(str,p.first,nw);
str=p.second;
}
if(str<q) SGadd(str,q,nw);
st.clear();
if(nw+1!=a.at(i)){
SGadd(0,q,nw+1);
break;
}
nw++;
}
st.emplace_back(nl.at(i),nr.at(i));
}
if(!st.empty()){
sort(st.begin(),st.end());
int str=0;
for(auto p:st){
if(str<p.first) SGadd(str,p.first,nw);
str=p.second;
}
if(str<q) SGadd(str,q,nw);
}
SGadd(0,q,nw+1);
rep(i,q) cout<<SGget(i)<<'\n';
}