题意: 解法: 显然a[i]能修改的数的个数为(a[i+1]-a[i]-1)+(a[i]-a[i-1]-1), 对于每个数,令b[i]=a[i]能修改的数的个数. 对于询问[l,r]: 1.如果l=r,那么答案为k-1 2.否则ans=sum{b[l+1,r-1]}+(k-a[r])+(a[r+1]-a[r]-1)+(a[l]-1)+(a[l+1]-a[l]-1). code: #include <bits/stdc++.h> #define int long long using namespace std; const int maxm=1e5+5; int sum[maxm]; int a[maxm]; int b[maxm]; int n,q,k; signed main(){ cin>>n>>q>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=1;i<=n;i++){ if(i+1<=n)b[i]+=a[i+1]-a[i]-1; if(i-1>=1)b[i]+=a[i]-a[i-1]-1; } for(int i=1;i<=n;i++){ sum[i]=sum[i-1]+b[i]; } while(q--){ int l,r;cin>>l>>r; if(l==r){ cout<<k-1<<endl; continue; } int ans=0; ans+=sum[r-1]-sum[l];//[l+1,r-1]部分 ans+=k-a[r]; ans+=a[l]-1; ans+=a[r]-a[r-1]-1; ans+=a[l+1]-a[l]-1; cout<<ans<<endl; } return 0; }