2 条题解
-
1
#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
#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
- 上传者