Submission #1242966

#TimeUsernameProblemLanguageResultExecution timeMemory
1242966shiori_chan코알라 (JOI13_koala)C++20
80 / 100
93 ms12736 KiB
#include <iostream> #include <vector> #include <random> #include <algorithm> #include <chrono> #include <map> #define all(x) x.begin(), x.end() #define compact(x) x.erase(unique(all(x)) , x.end()) using namespace std; typedef long long ll; #define int long long const int nd = 1e5 + 5 , INF = 1e18; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_int_distribution<int> dist(1 , (int)2e9); struct node{ int T , B , id; node(){} node(int T , int B) : T(T) , B(B){} } point[nd]; struct segment_tree{ int n; vector <int> st; segment_tree(int _n , int v){ n = _n; st.resize(4 * (n + 1) , v); } void up(int id , int l , int r , int x , int v){ if(l > x || r < x) return; if(l == r){ st[id] = v; return; } int mid = (r + l) / 2; up(id * 2 , l , mid , x , v); up(id * 2 + 1 , mid + 1 , r , x , v); st[id] = max(st[id * 2] , st[id * 2 + 1]); } int get(int id , int l , int r , int a , int b){ if(l > b || r < a) return - INF; if(a <= l && r <= b) return st[id]; int mid = (r + l) / 2; return max(get(id * 2 , l , mid , a , b) , get(id * 2 + 1 , mid + 1 , r , a , b)); } }; map <int , int> mp; void solve(){ int D , M , K , A , N; cin >> K >> M >> D >> A >> N; ++ N; segment_tree seg(N , -INF); vector <int> tmp; point[N] = node(M , 0); tmp.push_back(K % D); tmp.push_back(-1); for(int i = 1;i <= N; ++ i) cin >> point[i].T >> point[i].B , point[i].id = point[i].T / D , tmp.push_back(point[i].T % D); sort(all(tmp)); compact(tmp); for(int i = 0;i < tmp.size(); ++ i) mp[tmp[i]] = i; seg.up(1 , 1 , N , mp[K % D] , 0 + K / D * A); for(int i = 1 ; i <= N; ++ i){ int x = mp[point[i].T % D]; int ans = max(seg.get(1 , 1 , N , 1 , x - 1) - A , seg.get(1 , 1 , N , x , N)); ans += point[i].B - (point[i].T / D) * A; seg.up(1 , 1 , N , x , ans + (point[i].T / D) * A); if(i == N) cout << ans; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); #define task "task" if(fopen(task".inp", "r")) { freopen(task".inp", "r", stdin); freopen(task".out", "w", stdout); } solve(); return 0; }

Compilation message (stderr)

koala.cpp: In function 'int main()':
koala.cpp:90:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   90 |                 freopen(task".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
koala.cpp:91:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |                 freopen(task".out", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...