区间修改,单点查询(差分)
#include<iostream>//区间修改,单点查询 using namespace std; #define M 500010 int tr[M],b[M],n; int search(int pos) { int sum=0; while(pos) { sum+=tr[pos]; pos-=(pos^(pos-1))&pos; } return sum; } void add(int pos,int v) { while(pos<=n) { tr[pos]+=v; pos+=(pos^(pos-1))&pos; } } int main() { cin>>n; int a=0,c=0; for(int i=1;i<=n;i++) { cin>>a; b[i]=a-c; c=a; } for(int i=1;i<=n;i++) add(i,b[i]); cin>>a; cout<<search(a); }