結果
問題 | No.448 ゆきこーだーの雨と雪 (3) |
ユーザー | char134217728 |
提出日時 | 2017-09-13 16:26:52 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 273 ms / 2,000 ms |
コード長 | 3,180 bytes |
コンパイル時間 | 2,023 ms |
コンパイル使用メモリ | 183,292 KB |
実行使用メモリ | 27,636 KB |
最終ジャッジ日時 | 2024-11-07 19:51:40 |
合計ジャッジ時間 | 9,179 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 3 ms
5,248 KB |
testcase_07 | AC | 2 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 3 ms
5,248 KB |
testcase_10 | AC | 3 ms
5,248 KB |
testcase_11 | AC | 3 ms
5,248 KB |
testcase_12 | AC | 2 ms
5,248 KB |
testcase_13 | AC | 32 ms
6,384 KB |
testcase_14 | AC | 36 ms
6,896 KB |
testcase_15 | AC | 99 ms
13,168 KB |
testcase_16 | AC | 177 ms
20,588 KB |
testcase_17 | AC | 161 ms
21,740 KB |
testcase_18 | AC | 25 ms
5,740 KB |
testcase_19 | AC | 245 ms
25,716 KB |
testcase_20 | AC | 74 ms
10,736 KB |
testcase_21 | AC | 235 ms
25,712 KB |
testcase_22 | AC | 83 ms
11,888 KB |
testcase_23 | AC | 251 ms
25,840 KB |
testcase_24 | AC | 54 ms
8,560 KB |
testcase_25 | AC | 238 ms
25,588 KB |
testcase_26 | AC | 24 ms
5,744 KB |
testcase_27 | AC | 180 ms
20,976 KB |
testcase_28 | AC | 161 ms
17,772 KB |
testcase_29 | AC | 91 ms
12,272 KB |
testcase_30 | AC | 255 ms
26,224 KB |
testcase_31 | AC | 29 ms
6,512 KB |
testcase_32 | AC | 30 ms
6,768 KB |
testcase_33 | AC | 273 ms
27,508 KB |
testcase_34 | AC | 249 ms
27,500 KB |
testcase_35 | AC | 271 ms
27,632 KB |
testcase_36 | AC | 227 ms
27,504 KB |
testcase_37 | AC | 266 ms
27,504 KB |
testcase_38 | AC | 262 ms
27,636 KB |
コンパイルメッセージ
main.cpp:79:1: warning: ISO C++ forbids declaration of ‘main’ with no type [-Wreturn-type] 79 | main(){ | ^~~~
ソースコード
#include <bits/stdc++.h> #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define FORR(i,a,b) for (int i=(a);i>=(b);i--) #define pb push_back #define pcnt __builtin_popcount #define show(x) cout<<#x<<" = "<<x<<endl; #define maxs(x,y) x = max(x,y) #define mins(x,y) x = min(x,y) #define fi first #define se second #define rng(a) a.begin(),a.end() #define each(it,c) for(__typeof((c).begin()) it=(c).begin();it!=(c).end();it++) #define sz(x) (int)(x).size() #define mp make_pair using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<pii> vpii; typedef set<int> si; typedef pair<ll,ll> pll; typedef vector<ll> vl; typedef vector<vl> vvl; typedef vector<pll> vpll; typedef set<ll> sl; template<typename T>string join(vector<T>&v) {stringstream s;FOR(i,0,sz(v))s<<' '<<v[i];return s.str().substr(1);} ll gcd(ll a,ll b){if(a>b)swap(a,b);for(;a>0;b%=a,swap(a,b));return b;} int modpow(ll a,ll n,int m){if(a==0)return a;ll p=1;for(;n>0;n/=2,a=a*a%m)if(n&1)p=p*a%m;return(int)p;} void dout(double d){printf("%.12f\n",d);} const int iinf = 1e9; const ll linf = 1e18; const int mod = 1e9+7; const double pi = acos(-1); const double eps = 1e-10; struct SegTree{ typedef ll T; T e = 0; T m(const T&a, const T&b){return min(a+b, linf);} //################################################### typedef int i;i n;vector<T> d; void init(i m){n=1<<(32-__builtin_clz(m-1));d.resize(2*n-1);FOR(j,0,2*n-1)d[j]=e;} void init(vector<T>&v){n=1<<(32-__builtin_clz(sz(v)-1));d.resize(2*n-1);FOR(j,0,sz(v))d[j+n-1]=v[j];FORR(k, n-2, 0)d[k]=m(d[k*2+1],d[k*2+2]);} void update(i k,T a){k+=n-1;d[k]=a;while(k>0){k=(k-1)/2;d[k]=m(d[k*2+1],d[k*2+2]);}} T q(i a,i b,i k,i l,i r){return (r<=a||b<=l)?e:(a<=l&&r<=b)?d[k]:m(q(a,b,k*2+1,l,(l+r)/2),q(a,b,k*2+2,(l+r)/2,r));} T query(i a,i b){return q(a,b,0,0,n);} }; SegTree seg; ll n, k; map<ll, int> th; vpll v; ll dp[200005][2], dh[200005]; ll calc_max_p(){ ll ret = 0; set<ll> y; set<ll>::iterator sitr; each(itr, v){ sitr = y.upper_bound(itr->se - k); if(sitr != y.end() && *sitr <= itr->se){ ret = itr->fi; break; } sitr = y.upper_bound(itr->se); if(sitr != y.begin() && *(--sitr) > itr->se - k){ ret = itr->fi; break; } y.insert(itr->se - k+1); y.insert(itr->se); } return ret; } main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> n >> k; seg.init(n+5); th[0] = 0; FOR(i, 1, n+1){ ll t, d; cin >> t >> d; seg.update(i, d); th[t] = i; dh[i] = d; v.pb(mp(d, t)); } sort(rng(v)); reverse(rng(v)); ll max_p = calc_max_p(); each(itr, v){ if(itr->fi <= max_p)break; seg.update(th[itr->se], linf); dh[th[itr->se]] = linf; } int i = 1; map<ll, int>::iterator mitr; each(itr, th){ if(itr->fi == 0)continue; dp[i][0] = min(dp[i-1][0], dp[i-1][1]) + dh[i]; mitr = th.upper_bound(itr->fi - k); ll su = seg.query(mitr->se, i); if(mitr != th.begin()) mitr--; dp[i][1] = min(dp[th[mitr->fi]][0], dp[th[mitr->fi]][1]) + su; i++; } cout << max_p << endl; cout << min(dp[n][0], dp[n][1]) << endl; return 0; }