C - Peakときかた

自分はこんな感じでやりました

初心者なので悪しからず

#include<bits/stdc++.h>
using namespace std;
int main(){
  int n,m;cin>>n>>m;
  vector<int>a(n);
  for(int i=0;i<n;i++){
    cin>>a[i];
  }
  sort(a.begin(),a.end());
  int ans=0;
  for(int i=0,j=0;i<n;i++){
    while(j<n and a[j]-a[i]<m){
      j++;
    }
    ans=max(ans,j-i);
  }
  cout<<ans<<endl;
  return 0;
}

 

一つずつ説明していきます

int main(){
  int n,m;cin>>n>>m;
  vector<int>a(n);
  for(int i=0;i<n;i++){
    cin>>a[i];
  }ここについては理解してくだせい

そのあとはソート君を使います

そうすることでこの後することがやりやすくなり

あと順序になるので気分がいいです

for(int i=0,j=0;i<n;i++){
    while(j<n and a[j]-a[i]<m){
      j++;
    }

 

これはまず iを使って範囲の基準を作ります

そこからjをつかってa[i]とa[j]の差がm以下の際に

j++していきjの最大値をmaxで求め

最後に表示するだけです

maxの際にj-iをなぜするかはそれをしないと

基準がiなのでそれを引かないとmの範囲じゃなくなってすべてn-1の表示になっちゃうからや!

 

初心者なので説明へんだったら教えてください

ACだったのでコードは間違ってないと思うんでそこは大丈夫です

眠いんで寝まーす