結果
問題 | No.2650 [Cherry 6th Tune *] セイジャク |
ユーザー |
|
提出日時 | 2024-02-23 23:20:05 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 278 ms / 2,500 ms |
コード長 | 1,670 bytes |
コンパイル時間 | 2,637 ms |
コンパイル使用メモリ | 257,556 KB |
実行使用メモリ | 6,016 KB |
最終ジャッジ日時 | 2024-09-29 08:50:09 |
合計ジャッジ時間 | 11,730 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 31 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; const ll mod=998244353; vector<pair<int,int>> sortedx; struct lst{ int sz,n; vector<int> node; lst(){} lst(int n):n(n){ sz=1; while(sz<n)sz*=2; node.resize(2*sz,-1); } void operate(int l,int r,int t){ l+=sz;r+=sz; while(l<r){ if(l&1)node[l++]=t; if(r&1)node[--r]=t; l>>=1; r>>=1; } } void print(){ for(int i=1;i<sz;i++){ node[i*2]=max(node[i*2],node[i]); node[i*2+1]=max(node[i*2+1],node[i]); } vector<int> ans(n); for(int i=0;i<n;i++)ans[sortedx[i].second]=node[i+sz]; for(int i=0;i<n;i++)cout<<ans[i]<<endl; } }; int main(){ int n,a; cin>>n>>a; vector<int> x(n); for(int i=0;i<n;i++)cin>>x[i]; if(n==1){ int t; cin>>t; int ans=-1; for(int i=0;i<t;i++){ int l,r; cin>>l>>r; if(l<=x[0]&&x[0]<=r)ans=i+1; } cout<<ans<<endl; return 0; } sortedx.resize(n); for(int i=0;i<n;i++){ sortedx[i].first=x[i]; sortedx[i].second=i; } sort(sortedx.begin(),sortedx.end()); auto f=[&](int p){ int l=-1,r=n; while(l+1<r){ int c=(l+r)/2; if(sortedx[c].first<=p)l=c; else r=c; } return l; }; lst ls(n); int t; cin>>t; for(int i=0;i<t;i++){ int l,r; cin>>l>>r; l=f(l-1)+1; r=f(r)+1; ls.operate(l,r,i+1); } ls.print(); }