2 条题解

  • 1
    @ 2026-1-5 16:10:19
    #include<bits/stdc++.h>
    using namespace std;
    const long long MAXN=2e5;
    long long n,q;
    long long a[MAXN+1],b[MAXN+1];
    int main(){
        cin>>n;
        for(long long i=1;i<=n;i++)cin>>a[i];
        for(long long i=1;i<=n;i++){
            cin>>b[i];b[i]=b[i-1]+b[i];
        }
        cin>>q;
        while(q--){
            long long x,y;cin>>x>>y;
            long long r=upper_bound(a+1,a+1+n,y)-a-1;
            long long l=lower_bound(a+1,a+1+n,x)-a;
            if(r<l)cout<<0<<'\n';
            else{
                cout<<b[r]-b[l-1]<<'\n';
            }
        }
        return 0;
    }
    
    • -1
      @ 2025-12-16 20:45:48

      #include #include #include using namespace std;

      int main() { int N; cin >> N;

      vector<int> X(N);
      for (int i = 0; i < N; i++) {
          cin >> X[i];
      }
      
      vector<long long> P(N);
      for (int i = 0; i < N; i++) {
          cin >> P[i];
      }
      
      // 计算前缀和
      vector<long long> pref(N + 1, 0);
      for (int i = 0; i < N; i++) {
          pref[i + 1] = pref[i] + P[i];
      }
      
      int Q;
      cin >> Q;
      
      for (int q = 0; q < Q; q++) {
          int L, R;
          cin >> L >> R;
          
          // 找到第一个 >= L 的位置
          int left_idx = lower_bound(X.begin(), X.end(), L) - X.begin();
          // 找到第一个 > R 的位置
          int right_idx = upper_bound(X.begin(), X.end(), R) - X.begin();
          
          // 区间内村庄下标范围: [left_idx, right_idx-1]
          if (left_idx >= right_idx) {
              cout << 0 << endl;
          } else {
              // 前缀和计算: sum(P[left_idx..right_idx-1])
              long long sum = pref[right_idx] - pref[left_idx];
              cout << sum << endl;
          }
      }
      
      return 0;
      

      }

      • 1

      信息

      ID
      14543
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      3
      已通过
      3
      上传者