結果
| 問題 |
No.489 株に挑戦
|
| コンテスト | |
| ユーザー |
hornistyf
|
| 提出日時 | 2020-01-06 23:14:39 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,486 bytes |
| コンパイル時間 | 962 ms |
| コンパイル使用メモリ | 92,912 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-23 00:21:31 |
| 合計ジャッジ時間 | 3,904 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 WA * 16 |
ソースコード
//yuki489.cpp
//Mon Jan 6 22:44:48 2020
#include <iostream>
#include <string>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#define INTINF 2147483647
#define LLINF 9223372036854775807
using namespace std;
using ll=long long;
typedef pair<int,int> P;
int nodenum;
P seg[400000];
void init(int n){
nodenum = 1;
while (nodenum < n){
nodenum*=2;
}
for (int i=0;i<nodenum*2-1;i++){
seg[i] = make_pair(0,-1);
}
}
P query(int a, int b, int k, int l, int r){
if (r<=a || b<=l){
return make_pair(0,-1);
}
if (a<=l && r<=b){
return seg[k];
}else {
P v1 = query(a,b,k*2+1,l,(l+r)/2);
P v2 = query(a,b,k*2+2,(l+r)/2,r);
if (v1.first>=v2.first){
return v1;
}else {
return v2;
}
}
}
int main(){
int n,d,k;
cin >> n >> d >> k;
init(n);
for (int i=0;i<n;i++){
int temp;
cin >> temp;
seg[nodenum-1+i] = make_pair(temp,i);
}
for (int i=nodenum-2;i>=0;i--){
if (seg[2*i+1].first>=seg[2*i+2].first){
seg[i] = seg[2*i+1];
}else {
seg[i] = seg[2*i+2];
}
}
P ans = make_pair(0,-1);
int ansindex = -1;
for (int i=0;i<n;i++){
int last = min(i+d,n-1);
P temp = query(i,i+d+1,0,0,nodenum);
int x = temp.first-seg[nodenum-1+i].first;
if (ans.first<x){
ans.first = x;
ans.second = temp.second;
ansindex = i;
}
}
cout << ans.first*k << endl;
if (ansindex>=0){
cout << ansindex << " " << ans.second << endl;
}
// printf("%.4f\n",ans);
}
hornistyf