悬棺求调
查看原帖
悬棺求调
892084
xinxin2022楼主2024/7/15 14:16

全WA,样例正确

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],l,r,cnt;
int k[1005];
void init(){
    int i;
    for(i=1;i*100<=n;i++){
        for(int j=i*100;j<min(n,(i+1)*100);j++){
            k[i]+=a[j];
        }
    }
    cnt=i-1;
    if((i-1)*100<n){
        for(int j=(i-1)*100;j<=n;j++){
            k[i]+=a[j];
        }
        cnt=i;
    }
}
int main(){    
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    scanf("%d",&m);
    init();
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&l,&r);
        if(l/100==r/100){
            int ans=0;
            for(int j=l;j<=r;j++){
                ans+=a[j];
            }
            cout<<ans<<'\n';
            continue;
        }
        int ans=0;
        while(l/100!=r/100){
            if(l%100){
                for(int j=l;j<=int(l/100)*100+100;j++) ans+=a[j];
                l=int(l/100)*100+100;
            }
            else{
                ans+=k[l/100];
                l=min(l+100,n);
            }
        }
        if(l>r){
            for(int j=r;j>=l;j--) ans-=a[j];
        }
        if(l<r){
            for(int j=l;j<=r;j++) ans+=a[j];
        }
        cout<<ans<<'\n';
    }
    return 0;
}
2024/7/15 14:16
加载中...