結果
問題 |
No.3039 配信者
|
ユーザー |
|
提出日時 | 2025-02-28 21:37:29 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 382 ms / 2,000 ms |
コード長 | 2,972 bytes |
コンパイル時間 | 3,227 ms |
コンパイル使用メモリ | 279,348 KB |
実行使用メモリ | 19,536 KB |
最終ジャッジ日時 | 2025-02-28 21:37:38 |
合計ジャッジ時間 | 8,144 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 15 |
ソースコード
#include <bits/stdc++.h> //以下cout時の色設定 #define COUTRESET "\033[0m" // 色をリセット #define COUTRED "\033[31m" // 赤色 #define COUTGREEN "\033[32m" // 緑色 #define COUTYELLOW "\033[33m" // 黄色 #define COUTBLUE "\033[34m" // 青色 using namespace std; using ll=long long; using ld=long double; using P=pair<int,int>; const ll INF=9*1e15; const vector<ll> dx={0,0,1,-1}; const vector<ll> dy={1,-1,0,0}; #define rep(i,N) for(int i=0;i<N;i++) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() template <typename T1,typename T2> ostream& operator<<(ostream &os,pair<T1,T2> &P){ return os<<"("<<P.first<<","<<P.second<<") "; } template<typename T> ostream& operator<<(ostream &os,vector<T> vec){ for(auto val:vec){ os<<val<<" "; } return os<<"\n"; } template <typename T> void print(const T &vec){ int i=0; for(auto val:vec){ cout<<i<<":"<<val<<","; i++; } cout<<'\n'; } template<typename T> void print2(const vector<vector<T>> &vec){ int i=0; for(auto v:vec){ cout<<i<<": "; for(auto a:v){ cout<<a<<" "; } i++; cout<<'\n'; } } template<class T> void chmin(T &a,T b){ if(a>b){ a=b; } return; } template<class T> void chmax(T &a,T b){ if(a<b){ a=b; } return; } template<typename T> struct DualSegtree{ int siz; int N; int log; vector<T> data; int ceil_pow2(int n) { int x = 0; while ((1U << x) < (unsigned int)(n)) x++; return x; } DualSegtree(){} DualSegtree(int n){ N=n; log=ceil_pow2(n); siz=1<<log; data.resize(siz*2+1,0); } DualSegtree(const vector<T> &vec){ N=(int)vec.size(); log=ceil_pow2(N); siz=1<<log; data.resize(siz*2+1); for(int i=0;i<N;i++){ data[i+siz]=vec[i]; } } void add(int p,T x){ assert(0<=p && p<N); data[p+siz]+=x; } void add(int l,int r,T x){ assert(0<=l && l<=r && r<=N); l+=siz; r+=siz; while(l<r){ if(l&1){ data[l]+=x; l++; } if(r&1){ data[r-1]+=x; r--; } l>>=1; r>>=1; } return; } T get(int p){ assert(0<=p && p<N); T ret=data[p+siz]; int idx=p+siz; while(idx!=1){ idx/=2; ret+=data[idx]; } return ret; } void set(int p,T x){ assert(0<=p && p<N); add(p,x-get(p)); return; } }; int main(){ cin.tie(0)->sync_with_stdio(0); ll N,H; cin>>N>>H; DualSegtree<ll> need(H+1); rep(i,N){ int a,b; cin>>a>>b; need.add(a,b+1,1); } ll ans=1; rep(i,H){ chmax(ans,need.get(i)); } cout<<ans<<'\n'; }