-
Notifications
You must be signed in to change notification settings - Fork 1
/
Multiple-Games-MULGAME
65 lines (65 loc) · 1.31 KB
/
Multiple-Games-MULGAME
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<bits/stdc++.h>
#define int long long int
using namespace std;
int32_t main()
{
int t;
cin>>t;
while(t--)
{
int n,q,m;
cin>>n>>q>>m;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int b[1000001] = {};
map<pair<int,int>,int>mp;
while(q--)
{
int l,r;
cin>>l>>r;
--l;--r;
if(a[l]>m)
{
continue;
}
else if(a[l]<=m && a[r]>m)
{
b[a[l]]++;
b[m+1]--;
}
else if(a[r]<=m)
{
b[a[l]]++;
b[m+1]--;
mp[{a[l],a[r]}]++;
}
}
for(auto x:mp)
{
int k = x.first.first;
int p = x.first.second;
int l = x.second;
b[p+k] -= l;
b[p+2*k] += l;
int c = p + 2*k;
while(c+p <= m)
{
c += p;
b[c] -= l;
b[c+k] += l;
c += k;
}
}
int mx = 0;
for(int i=1;i<=m;i++)
{
b[i] += b[i-1];
mx = max(mx,b[i]);
}
cout<<mx<<endl;
}
return 0;
}