結果
| 問題 |
No.489 株に挑戦
|
| コンテスト | |
| ユーザー |
Pulmn
|
| 提出日時 | 2017-02-24 23:07:03 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 66 ms / 1,000 ms |
| コード長 | 2,240 bytes |
| コンパイル時間 | 1,355 ms |
| コンパイル使用メモリ | 90,400 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-19 23:02:23 |
| 合計ジャッジ時間 | 3,375 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 35 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:111:37: warning: ‘l’ may be used uninitialized in this function [-Wmaybe-uninitialized]
111 | else cout<<M<<endl<<j<<' '<<l<<endl;
| ^
main.cpp:111:32: warning: ‘j’ may be used uninitialized in this function [-Wmaybe-uninitialized]
111 | else cout<<M<<endl<<j<<' '<<l<<endl;
| ^~~
ソースコード
#include <iostream>
#include <fstream>
#include <typeinfo>
#include <vector>
#include <stack>
#include <cmath>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <iomanip>
#include <cctype>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<string> vs;
typedef vector<bool> vb;
typedef vector<vb> vvb;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<52;
const double pi=acos(-1);
const double eps=1e-8;
const ll mod=1e9+7;
const vi emp;
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,-0};
const int DX[8]={-1,-1,-1,0,0,1,1,1},DY[8]={1,0,-1,1,-1,1,0,-1};
class RMQ_Index{
private:
vp rmq;
P Query_func(int a,int b,int k,int l,int r){
if(r<=a||b<=l) return {-1,0};
if(a<=l&&r<=b) return rmq[k];
else{
int mid=(l+r)/2;
P vl=Query_func(a,b,k*2+1,l,mid);
P vr=Query_func(a,b,k*2+2,mid,r);
if(vl.first==vr.first) return (vl.second<vr.second?vl:vr);
return (vl>vr)?vl:vr;
}
}
public:
int n;
void Init(int n_){
n=1;
while(n<n_) n*=2;
rmq=vp(2*n-1,{-1,0});
for(int i=0;i<n;i++) rmq[i+n-1].second=i;
}
void Update(int k,int x){
k+=n-1;
rmq[k].first=x;
while(k>0){
k=(k-1)/2;
P L=rmq[k*2+1],R=rmq[k*2+2];
if(L.first==R.first) rmq[k]=L.second<R.second?L:R;
else rmq[k]=L>R?L:R;
}
}
P Query(int a,int b){
return Query_func(a,b,0,0,n);
}
int Open(int k){
return rmq[k+n-1].first;
}
};
int n,d;
ll k;
int main(){
cin>>n>>d>>k;
RMQ_Index rmq;
rmq.Init(n);
for(int i=0;i<n;i++){
int t;
cin>>t;
rmq.Update(i,t);
}
ll M=-INF;
int j,l;
for(int i=0;i<n-1;i++){
P p=rmq.Query(i,min(n,i+d+1));
ll res=k*((ll)p.first-rmq.Open(i));
if(M<res){
M=res;
j=i;
l=p.second;
}
}
if(M==0) cout<<0<<endl;
else cout<<M<<endl<<j<<' '<<l<<endl;
}
Pulmn