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
   | #include<bits/stdc++.h> using namespace std; int n,m,k; const int N=2000+100; int l[N],r[N]; int sum[N],ans=0; int f[N],cf[N]; inline void modify(int x,int y,int v){     if(x>y) return ;     cf[x]+=v,cf[y+1]-=v; } int main(){     ios::sync_with_stdio(false);     cin>>n>>m>>k;     for(int i=1;i<=m;i++){         cin>>l[i]>>r[i];     }     for(int i=1;i<=n-k+1;i++){         memset(sum,0,sizeof(sum));         memset(f,0,sizeof(f));         memset(cf,0,sizeof(cf));         for(int j=i;j<=i+k-1;j++) sum[j]=sum[j-1]+1;         for(int j=i+k;j<=n;j++) sum[j]=sum[j-1];         int res=0;         for(int j=1;j<=m;j++) res+=sum[r[j]]-sum[l[j]-1];         int x=i,y=i+k-1;         for(int j=1;j<=m;j++){             if(y<l[j]) {                 modify(l[j]-k+1,min(l[j],r[j]-k+1),1);                 modify(max(l[j],r[j]-k+1)+1,r[j]+1,-1);             }             else if(l[j]<=y&&r[j]>y){                 modify(x+1,min(l[j],r[j]-k+1),1);                 modify(max(l[j],r[j]-k+1)+1,r[j]-(y-l[j]),-1);             }         }         int tmp=0;         for(int j=1;j<=n;j++){             cf[j]+=cf[j-1];             tmp+=cf[j];             ans=max(ans,res+tmp);         }     }     cout<<ans; }
 
  |