#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);
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |