結果
| 問題 |
No.448 ゆきこーだーの雨と雪 (3)
|
| ユーザー |
dohatsutsu
|
| 提出日時 | 2016-11-18 23:20:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,365 bytes |
| コンパイル時間 | 2,104 ms |
| コンパイル使用メモリ | 163,720 KB |
| 実行使用メモリ | 814,864 KB |
| 最終ジャッジ日時 | 2024-11-26 08:36:11 |
| 合計ジャッジ時間 | 45,014 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | MLE * 35 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:68:14: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘int’ [-Wformat=]
68 | printf("%lld\n%lld\n",ans.first,ans.second);
| ~~~^ ~~~~~~~~~
| | |
| long long int int
| %d
main.cpp:57:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
57 | scanf("%d %d",&N,&D);
| ~~~~~^~~~~~~~~~~~~~~
main.cpp:60:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
60 | scanf("%d %lld",&a[i],&b[i+1]);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair< int ,ll> P;
#define MAX_N 200005
vector<int> X;
int N,D;
int a[MAX_N];
ll b[MAX_N];
P d[MAX_N];
ll INF = (1LL<<50);
int tree[(1<<19)];
int getMax(int a,int b,int k=0,int l=0,int r=(1<<18)){
if(b<=l || r<=a)return -INF;
if(a<=l && b<=r)return tree[k];
int m=(l+r)/2;
return max( getMax(a,b,k*2+1,l,m) , getMax(a,b,k*2+2,m,r) );
}
void update(int i,int x){
i+=(1<<18)-1;
tree[i]=x;
while(i){
i=(i-1)/2;
tree[i]=max(tree[i*2+1],tree[i*2+2]);
}
}
ll getSum(int l,int r){
return b[r]-b[l];
}
P solve(){
fill(d,d+MAX_N, P( 1e9 + 7 ,INF) );
d[0]=P(0,0);
for(int i=0;i<N;i++){
if(d[i]==P(INF,INF))continue;
ll maxm=d[i].first;
ll sum=d[i].second;
d[i+1]=min(d[i+1], P( max(maxm,(ll)getSum(i,i+1) ), sum+getSum(i,i+1) ) );
int target=lower_bound( X.begin(),X.end(),a[i]+D)-X.begin();
d[target]=min(d[target], P( max(maxm,(ll)getMax(i+1,target)) , sum+getSum(i+1,target) ) );
}
return d[N];
}
int main(){
fill(tree,tree+(1<<19), -INF );
scanf("%d %d",&N,&D);
X.resize(N+1);
for(int i=0;i<N;i++){
scanf("%d %lld",&a[i],&b[i+1]);
update( i , b[i+1] );
X[i]=a[i];
}
X[N]=1e9+9;
for(int i=1;i<=N;i++)b[i]+=b[i-1];
P ans=solve();
printf("%lld\n%lld\n",ans.first,ans.second);
return 0;
}
dohatsutsu