#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e7+6;
vector<int> d;
int cnt[MAXN], vis[MAXN],n;
int oblicz(int x){
int ans=0;
for(int di: d){
if(vis[di%x]!=x){
vis[di%x] = x;
cnt[di%x] = 1;
}
else cnt[di%x]++;
ans = max(ans, cnt[di%x]);
}
return ans;
}
int solve(){
for(int i=0;i<=n;i++) cnt[i] = vis[i] = 0;
if(d.size() <= 2) return d.size();
int ans=0;
for(int i=2;i<=(2*n)/d.size()+1;i++)
ans = max(ans, oblicz(i));
return ans;
}
int main(){
ios_base::sync_with_stdio(0);
int q; cin >> n >> q;
while(q--){
int a; cin >> a;
if(d.empty()) d.push_back(a);
else{
vector<int> new_d;
auto it = lower_bound(d.begin(),d.end(),a);
int x = (it==d.end()? -1: *it);
for(int di: d){
if(x!=a && di > a) {new_d.push_back(a); x=a;}
if(di!=a) new_d.push_back(di);
}
if(x!=a) new_d.push_back(a);
swap(d,new_d);
}
cout << solve() << '\n';
}
}
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 | #include <bits/stdc++.h> using namespace std; const int MAXN = 1e7+6; vector<int> d; int cnt[MAXN], vis[MAXN],n; int oblicz(int x){ int ans=0; for(int di: d){ if(vis[di%x]!=x){ vis[di%x] = x; cnt[di%x] = 1; } else cnt[di%x]++; ans = max(ans, cnt[di%x]); } return ans; } int solve(){ for(int i=0;i<=n;i++) cnt[i] = vis[i] = 0; if(d.size() <= 2) return d.size(); int ans=0; for(int i=2;i<=(2*n)/d.size()+1;i++) ans = max(ans, oblicz(i)); return ans; } int main(){ ios_base::sync_with_stdio(0); int q; cin >> n >> q; while(q--){ int a; cin >> a; if(d.empty()) d.push_back(a); else{ vector<int> new_d; auto it = lower_bound(d.begin(),d.end(),a); int x = (it==d.end()? -1: *it); for(int di: d){ if(x!=a && di > a) {new_d.push_back(a); x=a;} if(di!=a) new_d.push_back(di); } if(x!=a) new_d.push_back(a); swap(d,new_d); } cout << solve() << '\n'; } } |
English