#include "bits/stdc++.h" /** keep-include */
using namespace std;
#define rep(i, b, e) for(int i = (b); i <= (e); i++)
#define per(i, b, e) for(int i = (e); i >= (b); i--)
#define FOR(i, b, e) rep(i, b, (e) - 1)
#define SZ(x) int(x.size())
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define st first
#define nd second
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
auto &operator<<(auto &o, pair<auto, auto> p) {
return o << "(" << p.st << ", " << p.nd << ")"; }
auto operator<<(auto &o, auto x)->decltype(end(x), o) {
o << "{"; int i=0; for(auto e: x) o << ", " + 2*!i++ << e;
return o << "}"; }
#ifdef LOCAL
#define deb(x...) cerr << "[" #x "]: ", [](auto...$) { \
((cerr << $ << "; "),...) << endl; }(x)
#else
#define deb(...)
#endif
using se=pair<pair<ll, ll>, ll>;
bool from_both_sides;
void insert(set<se> &S, ll l, ll r, ll c){
vector<se> todo;
auto it=S.lower_bound(se(mp(mp(l, 0), 0)));
if(it!=S.begin())it--;
while(it!=S.end() && it->st.st<=r){
todo.pb(*it);
it++;
}
for(auto i : todo){
ll L=i.st.st, R=i.st.nd, C=i.nd;
if(L>r || R<l)continue;
S.erase(i);
if(L<l){
S.insert(mp(mp(L, l-1), C));
}
if(R>r){
S.insert(mp(mp(r+1, R), C));
}
}
S.insert(se(mp(l, r), c));
}
ll pytaj(set<se> &S, ll x, ll D){
auto it=S.lower_bound(mp(mp(x%D+1,0), 0));
deb(x, D);
if(it==S.begin())return x%D;
it--;
deb(x, D, *it);
if(x%D<=it->st.nd){
deb("a");
if(it->st.st==0 && from_both_sides){
it=S.end();
it--;
return x%D+D-it->st.st+1+it->nd;
}
return x%D-it->st.st+1+it->nd;
}
else return x%D;
}
void solve() {
int n, q;
cin>>n>>q;
ll A, B, D;
cin>>D>>A>>B;
vector<pair<ll ,ll>> seg;
for(int i=0; i<n; i++){
ll l, r;
cin>>l>>r;
r=max(r, D-1);
if(i==0){
seg.pb(mp(l, r));
}
else {
if(l<=seg.back().nd+1){
seg.back().nd=max(seg.back().nd, r);
}
else seg.pb(mp(l, r));
int t=lower_bound(all(seg), mp(r+2-D,0ll))-seg.begin();
t--;
if(t>=0){
seg.back().nd=max(r, seg[t].nd+D);
}
}
if(seg.back().nd-seg.back().st>=D-1)seg.back().nd=1e12;
deb(seg);
}
B-=A*D;
n=seg.size();
vector<pair<ll, int> > Q;
vector<ll> res(q);
for(int i=0; i<q; i++){
ll x;
cin>>x;
int t=lower_bound(all(seg), mp(x+1, 0ll))-seg.begin();
t--;
if(t>=0 && seg[t].nd>=x){
res[i]=-1;
continue;
}
Q.pb(mp(x, i));
res[i]=x*A;
}
if(B>0){
vector<ll> odp(n);
for(int i=0; i<n; i++){
int t=lower_bound(all(seg), mp(seg[i].nd+2-D,0ll))-seg.begin();
if(t==0)odp[i]=1;
else{
odp[i]=odp[t-1]+1;
}
}
for(auto &[x, id] : Q){
int t=lower_bound(all(seg), mp(x+1, 0ll))-seg.begin();
t--;
if(t>=0)res[id]+=B*odp[t];
}
}
else{
deb(A, B, D, Q);
set<se> S;
sort(all(Q));
reverse(all(Q));
seg.pb(mp(2e12, 2e12));
for(auto &[l, r] : seg){
while(Q.size() && Q.back().st<l){
ll x=Q.back().st;
int id=Q.back().nd;
Q.pop_back();
res[id]+=B*((x-pytaj(S, x, D))/D);
}
if(l>1e12){
break;
}
ll val=pytaj(S, l-1, D);
deb(l, r, val);
if(l/D==r/D){
insert(S, l%D, r%D, val);
if(l%D==0 || r%D==D-1)from_both_sides=0;
}
else{
insert(S, l%D, D-1, val);
insert(S, 0, r%D, val);
from_both_sides=1;
}
deb("S");
for(auto &i:S){
deb(i);
}
}
}
for(int i=0; i<q; i++){
cout<<res[i]<<"\n";
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int tt = 1;
// cin >> tt;
FOR(te, 0, tt) solve();
return 0;
}
Compilation message
Main.cpp:17:18: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
17 | auto &operator<<(auto &o, pair<auto, auto> p) {
| ^~~~
Main.cpp:17:32: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
17 | auto &operator<<(auto &o, pair<auto, auto> p) {
| ^~~~
Main.cpp:17:38: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
17 | auto &operator<<(auto &o, pair<auto, auto> p) {
| ^~~~
Main.cpp:19:17: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
19 | auto operator<<(auto &o, auto x)->decltype(end(x), o) {
| ^~~~
Main.cpp:19:26: warning: use of 'auto' in parameter declaration only available with '-fconcepts-ts'
19 | auto operator<<(auto &o, auto x)->decltype(end(x), o) {
| ^~~~
Main.cpp: In function 'void solve()':
Main.cpp:156:23: warning: unused variable 'i' [-Wunused-variable]
156 | for(auto &i:S){
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Incorrect |
46 ms |
7112 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Incorrect |
2 ms |
600 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
38 ms |
7316 KB |
Output is correct |
2 |
Correct |
39 ms |
7368 KB |
Output is correct |
3 |
Correct |
2 ms |
600 KB |
Output is correct |
4 |
Correct |
176 ms |
18128 KB |
Output is correct |
5 |
Correct |
160 ms |
18072 KB |
Output is correct |
6 |
Correct |
173 ms |
18252 KB |
Output is correct |
7 |
Correct |
169 ms |
18076 KB |
Output is correct |
8 |
Correct |
173 ms |
18204 KB |
Output is correct |
9 |
Correct |
201 ms |
18480 KB |
Output is correct |
10 |
Correct |
211 ms |
18364 KB |
Output is correct |
11 |
Correct |
197 ms |
18364 KB |
Output is correct |
12 |
Correct |
182 ms |
18108 KB |
Output is correct |
13 |
Correct |
176 ms |
18124 KB |
Output is correct |
14 |
Correct |
80 ms |
11272 KB |
Output is correct |
15 |
Correct |
65 ms |
10444 KB |
Output is correct |
16 |
Correct |
69 ms |
10320 KB |
Output is correct |
17 |
Correct |
182 ms |
17984 KB |
Output is correct |
18 |
Correct |
179 ms |
17784 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Incorrect |
46 ms |
7112 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |