結果
問題 | No.489 株に挑戦 |
ユーザー |
|
提出日時 | 2017-02-25 01:02:13 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 51 ms / 1,000 ms |
コード長 | 3,875 bytes |
コンパイル時間 | 1,777 ms |
コンパイル使用メモリ | 174,252 KB |
実行使用メモリ | 6,400 KB |
最終ジャッジ日時 | 2024-07-19 23:19:05 |
合計ジャッジ時間 | 3,617 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:121:74: warning: 'bestj' may be used uninitialized [-Wmaybe-uninitialized] 121 | cout << (((ll)best)*(ll)kk) << endl << --besti << ' ' << --bestj << endl; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ main.cpp:107:20: note: 'bestj' was declared here 107 | ll besti = -1, bestj; | ^~~~~
ソースコード
#include<bits/stdc++.h>using namespace std;typedef unsigned int uint;typedef long long int ll;typedef unsigned long long int ull;#define debugv(v) printf("L%d %s => ",__LINE__,#v);for(auto e:v){cout<<e<<" ";}cout<<endl;#define debugm(m) printf("L%d %s is..\n",__LINE__,#m);for(auto v:m){for(auto e:v){cout<<e<<" ";}cout<<endl;}#define debuga(m,w) printf("L%d %s is => ",__LINE__,#m);for(int x=0;x<(w);x++){cout<<(m)[x]<<" ";}cout<<endl;#define debugaa(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[x][y]<<" ";}cout<<endl;}#define debugaar(m,w,h) printf("L%d %s is..\n",__LINE__,#m);for(int y=0;y<(h);y++){for(int x=0;x<(w);x++){cout<<(m)[y][x]<<" ";}cout<<endl;}#define ALL(v) (v).begin(),(v).end()#define BIGINT 0x7FFFFFFFLL#define E107 1000000007llvoid printbit(int u) { if (u == 0)cout << 0; else { int s = 0, k = 0; for (; 0<u; u >>= 1, k++)s = (s << 1) | (u & 1); for (; 0<k--; s >>= 1)cout <<(s & 1); } }#define TIME chrono::system_clock::now()#define MILLISEC(t) (chrono::duration_cast<chrono::milliseconds>(t).count())namespace {std::chrono::system_clock::time_point t;void tic() { t = TIME; }void toc() { fprintf(stderr, "TIME : %lldms\n", MILLISEC(TIME - t)); }std::chrono::system_clock::time_point tle = TIME;void safe_tle(int msec) { assert(MILLISEC(TIME - tle) < msec); }}template<typename T1, typename T2>ostream& operator <<(ostream &o, const pair<T1, T2> p) { o << "(" << p.first << ":" << p.second << ")"; return o; }template<typename T, T idt = 0x7FFFFFFF, typename Compare = std::less<T>>class segtree {size_t size;vector<T> data;Compare cp;const T& selector(const T& x, const T& y) const {return cp(x, y) ? x : y;}public:segtree(size_t n) {size = 1;while (size<n) size <<= 1;data.resize(size * 2);}void fill(const T& e) {std::fill(data.begin(), data.end(), e);}const T& operator[](size_t index) const {return data[size - 1 + index];}void update(size_t index, const T& e) {index += size - 1;data[index] = e;while (0 < index) {index = (index - 1) / 2; // 親へ移動data[index] = selector(data[index * 2 + 1], data[index * 2 + 2]); // iの子を参照して、d[i]を更新する}}T query(size_t begin, size_t end, size_t ptr = 0, size_t rangebegin = 0, size_t rangeend = 0) const {if (rangeend <= rangebegin) { rangeend = size; }if (rangeend <= begin || end <= rangebegin) return idt;if (begin <= rangebegin && rangeend <= end) return data[ptr];size_t rangemid = (rangebegin + rangeend) / 2;return selector(query(begin, end, ptr * 2 + 1, rangebegin, rangemid), query(begin, end, ptr * 2 + 2, rangemid, rangeend));}};int width, height;ll n, dd, kk;ll daikon[100010];struct compare{bool operator ()(const ll& l, const ll& r) const {if (l == BIGINT) return false;if (r == BIGINT) return true;return daikon[l] <= daikon[r];}};int main() {ll i, j, k, l;ll x, y, a, b;cin >> n >> dd >> kk;for (i = 1; i <= n; ++i) {scanf("%lld", daikon + i);}segtree<int, BIGINT, compare> seg(n*2);seg.fill(BIGINT);ll best = 0;ll besti = -1, bestj;for (i = 1; i <= n; ++i) {seg.update(i, i);ll les = seg.query(max(0ll, i - dd), i);if (les != BIGINT && best < daikon[i] - daikon[les]) {best = daikon[i] - daikon[les];besti = les;bestj = i;}}if (besti == -1 || best == 0) {cout << 0 << endl;}else {cout << (((ll)best)*(ll)kk) << endl << --besti << ' ' << --bestj << endl;}return 0;}