Submission
Status:
[PPPPPPPPPP]
Score: 100
User: 998244353
Problemset: 02.Forbidden Boss Room
Language: cpp
Time: 0.087 second
Submitted On: 2025-03-31 15:32:19
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <stack>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set(x) tree<x, null_type, less<x>, rb_tree_tag, tree_order_statistics_node_update>
using namespace std;
#define lgm cin.tie(0)->sync_with_stdio(0);
#define be(x) x.begin(),x.end()
#define ve vector
#define ll long long
#define ld long double
bool enabledb=0;
#define DB(CODE) cout<<'\t'<<CODE<<endl;
#define SP <<' '<<
#define ull unsigned ll
#define f first
#define s second
#define pii pair<int, int>
#define tii tuple<int,int,int>
#define pll pair<ll,ll>
#define sz(x) (int)x.size()
#define pb push_back
const ll mod = 1e9+7,maxn=200005;
const ll INF=(ll)9e18;
int a[maxn];
signed main() {
lgm;
int t;
cin >> t;
while (t--) {
ll n,m;
cin >> n >> m;
map<ll,bool> exist; // this was supposed to be map<ll,bool> but map<int,bool> passed apparently...
ll curmx=0;
exist[0]=1;
ll sum=0;
multiset<ll> ee;
ee.insert(0);
ll c;
for (int i=0;i<n;i++) {
cin >> c;
sum=(sum+c)%m;
auto cc=ee.upper_bound(sum);
if (cc==ee.end()) curmx=max(curmx,sum);
else curmx=max({curmx,sum,sum-(*cc)+m});
if (!exist[sum]) {
ee.insert(sum);
}
exist[sum]=1;
}
cout << curmx << '\n';
}
}