#include<bits/stdc++.h>
#define pb push_back
#define pli pair<ll,ll>
#define fi first
#define se second
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;
using ll=long long;
const ll maxn=4e5+10;
const ll inf=1e18;
const ll mod=1e9+7;
ll n,m,l,c,a[maxn/2],b[maxn/2];
ll dis(ll i,ll j)
{
return (j-i+l)%l;
}
vector<ll>g[maxn];
ll deg[maxn];
bool vis[maxn];
vector<ll>vec[maxn],vv[maxn];
ll nxt[maxn],w[maxn];
bool in[maxn];
void dtmt()
{
queue<int>q;
for(int i=1;i<=n+m;i++)
{
in[i]=true;
if(deg[i]==0) q.push(i);
}
while(!q.empty())
{
ll u=q.front();
in[u]=false;
q.pop();
deg[nxt[u]]--;
if(deg[nxt[u]]==0) q.push(nxt[u]);
}
}
pli e[maxn];
ll tg=0,tin[maxn],tout[maxn],cnt=0,rte[maxn],id[maxn];
ll h[maxn];
vector<ll>app[maxn],pre[maxn];
void dfs(ll u)
{
tin[u]=++tg;
id[u]=cnt;
if(u>n) app[cnt].pb(h[u]);
vis[u]=true;
for(int v:g[u]) h[v]=h[u]+w[v],dfs(v);
tout[u]=tg;
}
ll root[maxn],sum[maxn];
ll bit[maxn];
void update(ll i,ll v)
{
while(i<maxn) bit[i]+=v,i+=i&(-i);
}
ll get(ll i)
{
ll aa=0;
while(i>0) aa+=bit[i],i-=i&(-i);
return aa;
}
ll beg[maxn],ans[maxn];
vector<pli>nen1,nen2;
struct Tq
{
ll v,l,r,id;
bool operator<(const Tq&o)
{
return v<o.v;
}
};
vector<Tq>query1,query2;
void solve()
{
cin >> n >> m >> l >> c;
for(int i=1;i<=n;i++) cin >> a[i],e[i]={a[i],i};
for(int i=1;i<=m;i++) cin >> b[i];
sort(e+1,e+n+1);
for(int i=1;i<=n;i++)
{
ll x=lower_bound(e+1,e+n+1,(pli){(a[i]-(c%l)+l)%l+1,0})-e-1;
ll id;
if(x==0) id=e[n].se;
else id=e[x].se;
nxt[i]=id;
w[i]=dis(a[id],(a[i]-(c%l)+l)%l)+c;
deg[id]++;
}
for(int i=1;i<=m;i++)
{
ll x=lower_bound(e+1,e+n+1,(pli){b[i]+1,0})-e-1;
ll id;
if(x==0) id=e[n].se;
else id=e[x].se;
nxt[i+n]=id;
w[i+n]=dis(a[id],b[i]);
deg[id]++;
}
dtmt();
for(int i=1;i<=n+m;i++) if(in[i]==false) g[nxt[i]].pb(i);
ll sz=0;
for(int i=1;i<=n+m;i++)
{
if(in[i]==true&&vis[i]==false)
{
cnt++;
root[cnt]=i;
vec[cnt].pb(i);
vis[i]=true;
sum[cnt]=w[i];
for(int j=nxt[i];j!=i;j=nxt[j])
{
vis[j]=true;
g[nxt[j]].pb(j);
sum[cnt]+=w[j];
vec[cnt].pb(j);
}
dfs(i);
sort(app[cnt].begin(),app[cnt].end());
beg[cnt]=sz+1;
for(int j=sz+1;j<=sz+app[cnt].size();j++) nen2.pb({app[cnt][j-sz-1]%sum[cnt],j});
pre[cnt].resize(app[cnt].size());
for(int j=0;j<app[cnt].size();j++)
{
pre[cnt][j]=app[cnt][j]/sum[cnt];
if(j>0) pre[cnt][j]+=pre[cnt][j-1];
}
sz+=app[cnt].size();
ll luu=0;
for(auto zz:vec[cnt]) rte[zz]=luu,luu+=w[zz];
rte[i]=luu;
}
}
for(int i=1;i<=m;i++) nen1.pb({h[i+n],tin[i+n]});
sort(nen1.begin(),nen1.end());
sort(nen2.begin(),nen2.end(),greater<pli>());
ll q;
cin >> q;
for(int i=1;i<=q;i++)
{
ll v,T;
ans[i]=0;
cin >> v >> T;
query1.pb({T+h[v],tin[v],tout[v],i});
if(in[v])
{
ll u=v;
ll ii=id[u];
ll vc=upper_bound(app[ii].begin(),app[ii].end(),T-rte[u])-app[ii].begin();
if(vc==0) continue;
ll r1=(T-rte[u])/sum[ii];
ll du=(T-rte[u])%sum[ii];
ans[i]+=vc;
ans[i]+=r1*vc-pre[ii][vc-1];
query2.pb({du+1,beg[ii],beg[ii]+vc-1,i});
}
}
sort(query1.begin(),query1.end()),fill(bit,bit+maxn,0);
ll j=0;
for(int i=0;i<query1.size();i++)
{
while(j<nen1.size()&&nen1[j].fi<=query1[i].v) update(nen1[j].se,1),j++;
ans[query1[i].id]+=get(query1[i].r)-get(query1[i].l-1);
}
sort(query2.begin(),query2.end());fill(bit,bit+maxn,0);
j=0;
for(int i=(int)query2.size()-1;i>=0;i--)
{
while(j<nen2.size()&&nen2[j].fi>=query2[i].v) update(nen2[j].se,1),j++;
ans[query2[i].id]-=get(query2[i].r)-get(query2[i].l-1);
}
for(int i=1;i<=q;i++) cout << ans[i]<<'\n';
}
int main()
{
fastio
//freopen("c.INP","r",stdin);
//freopen("c.OUT","w",stdout);
solve();
}
Compilation message
harvest.cpp: In function 'void solve()':
harvest.cpp:124:29: warning: comparison of integer expressions of different signedness: 'int' and 'long long unsigned int' [-Wsign-compare]
124 | for(int j=sz+1;j<=sz+app[cnt].size();j++) nen2.pb({app[cnt][j-sz-1]%sum[cnt],j});
| ~^~~~~~~~~~~~~~~~~~~~
harvest.cpp:126:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
126 | for(int j=0;j<app[cnt].size();j++)
| ~^~~~~~~~~~~~~~~~
harvest.cpp:163:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<Tq>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
163 | for(int i=0;i<query1.size();i++)
| ~^~~~~~~~~~~~~~
harvest.cpp:165:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
165 | while(j<nen1.size()&&nen1[j].fi<=query1[i].v) update(nen1[j].se,1),j++;
| ~^~~~~~~~~~~~
harvest.cpp:172:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
172 | while(j<nen2.size()&&nen2[j].fi>=query2[i].v) update(nen2[j].se,1),j++;
| ~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
76636 KB |
Output is correct |
2 |
Correct |
18 ms |
77128 KB |
Output is correct |
3 |
Correct |
16 ms |
77276 KB |
Output is correct |
4 |
Correct |
19 ms |
77400 KB |
Output is correct |
5 |
Correct |
16 ms |
77148 KB |
Output is correct |
6 |
Correct |
16 ms |
77128 KB |
Output is correct |
7 |
Correct |
17 ms |
77148 KB |
Output is correct |
8 |
Correct |
15 ms |
76892 KB |
Output is correct |
9 |
Correct |
17 ms |
76892 KB |
Output is correct |
10 |
Correct |
16 ms |
76892 KB |
Output is correct |
11 |
Correct |
16 ms |
76892 KB |
Output is correct |
12 |
Correct |
17 ms |
77052 KB |
Output is correct |
13 |
Correct |
19 ms |
77404 KB |
Output is correct |
14 |
Correct |
17 ms |
77116 KB |
Output is correct |
15 |
Correct |
16 ms |
76944 KB |
Output is correct |
16 |
Correct |
17 ms |
77120 KB |
Output is correct |
17 |
Correct |
17 ms |
76976 KB |
Output is correct |
18 |
Correct |
16 ms |
76892 KB |
Output is correct |
19 |
Correct |
17 ms |
76968 KB |
Output is correct |
20 |
Correct |
16 ms |
76896 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
104 ms |
102896 KB |
Output is correct |
2 |
Correct |
146 ms |
113036 KB |
Output is correct |
3 |
Correct |
149 ms |
117424 KB |
Output is correct |
4 |
Correct |
145 ms |
123628 KB |
Output is correct |
5 |
Correct |
136 ms |
122800 KB |
Output is correct |
6 |
Correct |
153 ms |
124100 KB |
Output is correct |
7 |
Correct |
116 ms |
110652 KB |
Output is correct |
8 |
Correct |
118 ms |
110076 KB |
Output is correct |
9 |
Correct |
175 ms |
133320 KB |
Output is correct |
10 |
Correct |
152 ms |
137088 KB |
Output is correct |
11 |
Correct |
202 ms |
134772 KB |
Output is correct |
12 |
Correct |
198 ms |
133756 KB |
Output is correct |
13 |
Correct |
202 ms |
132992 KB |
Output is correct |
14 |
Correct |
187 ms |
134368 KB |
Output is correct |
15 |
Correct |
168 ms |
132512 KB |
Output is correct |
16 |
Correct |
139 ms |
119472 KB |
Output is correct |
17 |
Correct |
143 ms |
118956 KB |
Output is correct |
18 |
Correct |
94 ms |
99704 KB |
Output is correct |
19 |
Correct |
92 ms |
98420 KB |
Output is correct |
20 |
Correct |
123 ms |
113116 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
28 ms |
76636 KB |
Output is correct |
2 |
Correct |
18 ms |
77128 KB |
Output is correct |
3 |
Correct |
16 ms |
77276 KB |
Output is correct |
4 |
Correct |
19 ms |
77400 KB |
Output is correct |
5 |
Correct |
16 ms |
77148 KB |
Output is correct |
6 |
Correct |
16 ms |
77128 KB |
Output is correct |
7 |
Correct |
17 ms |
77148 KB |
Output is correct |
8 |
Correct |
15 ms |
76892 KB |
Output is correct |
9 |
Correct |
17 ms |
76892 KB |
Output is correct |
10 |
Correct |
16 ms |
76892 KB |
Output is correct |
11 |
Correct |
16 ms |
76892 KB |
Output is correct |
12 |
Correct |
17 ms |
77052 KB |
Output is correct |
13 |
Correct |
19 ms |
77404 KB |
Output is correct |
14 |
Correct |
17 ms |
77116 KB |
Output is correct |
15 |
Correct |
16 ms |
76944 KB |
Output is correct |
16 |
Correct |
17 ms |
77120 KB |
Output is correct |
17 |
Correct |
17 ms |
76976 KB |
Output is correct |
18 |
Correct |
16 ms |
76892 KB |
Output is correct |
19 |
Correct |
17 ms |
76968 KB |
Output is correct |
20 |
Correct |
16 ms |
76896 KB |
Output is correct |
21 |
Correct |
104 ms |
102896 KB |
Output is correct |
22 |
Correct |
146 ms |
113036 KB |
Output is correct |
23 |
Correct |
149 ms |
117424 KB |
Output is correct |
24 |
Correct |
145 ms |
123628 KB |
Output is correct |
25 |
Correct |
136 ms |
122800 KB |
Output is correct |
26 |
Correct |
153 ms |
124100 KB |
Output is correct |
27 |
Correct |
116 ms |
110652 KB |
Output is correct |
28 |
Correct |
118 ms |
110076 KB |
Output is correct |
29 |
Correct |
175 ms |
133320 KB |
Output is correct |
30 |
Correct |
152 ms |
137088 KB |
Output is correct |
31 |
Correct |
202 ms |
134772 KB |
Output is correct |
32 |
Correct |
198 ms |
133756 KB |
Output is correct |
33 |
Correct |
202 ms |
132992 KB |
Output is correct |
34 |
Correct |
187 ms |
134368 KB |
Output is correct |
35 |
Correct |
168 ms |
132512 KB |
Output is correct |
36 |
Correct |
139 ms |
119472 KB |
Output is correct |
37 |
Correct |
143 ms |
118956 KB |
Output is correct |
38 |
Correct |
94 ms |
99704 KB |
Output is correct |
39 |
Correct |
92 ms |
98420 KB |
Output is correct |
40 |
Correct |
123 ms |
113116 KB |
Output is correct |
41 |
Correct |
210 ms |
123380 KB |
Output is correct |
42 |
Correct |
251 ms |
136076 KB |
Output is correct |
43 |
Correct |
111 ms |
113656 KB |
Output is correct |
44 |
Correct |
159 ms |
127228 KB |
Output is correct |
45 |
Correct |
199 ms |
134044 KB |
Output is correct |
46 |
Correct |
205 ms |
134588 KB |
Output is correct |
47 |
Correct |
205 ms |
137312 KB |
Output is correct |
48 |
Correct |
192 ms |
137116 KB |
Output is correct |
49 |
Correct |
175 ms |
137076 KB |
Output is correct |
50 |
Correct |
167 ms |
122828 KB |
Output is correct |
51 |
Correct |
171 ms |
122668 KB |
Output is correct |
52 |
Correct |
232 ms |
145028 KB |
Output is correct |
53 |
Correct |
228 ms |
146164 KB |
Output is correct |
54 |
Correct |
235 ms |
139728 KB |
Output is correct |
55 |
Correct |
255 ms |
136952 KB |
Output is correct |
56 |
Correct |
202 ms |
130432 KB |
Output is correct |
57 |
Correct |
201 ms |
132084 KB |
Output is correct |
58 |
Correct |
235 ms |
135304 KB |
Output is correct |
59 |
Correct |
185 ms |
132552 KB |
Output is correct |
60 |
Correct |
183 ms |
131500 KB |
Output is correct |
61 |
Correct |
198 ms |
132152 KB |
Output is correct |
62 |
Correct |
247 ms |
148356 KB |
Output is correct |
63 |
Correct |
134 ms |
114516 KB |
Output is correct |
64 |
Correct |
137 ms |
114756 KB |
Output is correct |
65 |
Correct |
139 ms |
117292 KB |
Output is correct |
66 |
Correct |
146 ms |
114340 KB |
Output is correct |
67 |
Correct |
142 ms |
121508 KB |
Output is correct |
68 |
Correct |
150 ms |
118644 KB |
Output is correct |
69 |
Correct |
196 ms |
128548 KB |
Output is correct |
70 |
Correct |
185 ms |
121628 KB |
Output is correct |
71 |
Correct |
192 ms |
124892 KB |
Output is correct |
72 |
Correct |
196 ms |
125876 KB |
Output is correct |