#include <iostream>
#include <cstring>
using namespace std;
const int N = 114514;
int b[N];
int n,m,maxn=-1;
int lowbit(int x){
return x & (-x);
}
void add(int p, int v) {
while (p <= n) {
b[p] += v;
p += lowbit(p);
}
}
int ansum(int p) {
int sum = 0;
while (p > 0) {
sum += b[p];
p -= lowbit(p);
}
return sum;
}
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++){
int a,b;
cin >> a >> b;
add(a,b);
}
for(int i=m;i<=n;i++){
maxn=max(maxn,ansum(i-1)-ansum(i-n-1));
}
cout << maxn << endl;
return 0;
}
搬运自树状数组1及对应AC代码
看了一眼tj但是似乎没有什么区别...