自己写了一个线段树单点查询,但线上自测MLE+RE,本地没问题。
就是为了练习线段树写的单点查询,我当然知道用数组更香……
#include<iostream>
#include<cstdio>
using namespace std;
int n,a[100010],tree[200010],q,k;
void build(int u,int l,int r){
if(l==r){
tree[u]=a[l];
return;
}
int mid=(l+r)/2;
build(u*2,l,mid);
build(u*2+1,mid+1,r);
tree[u]=tree[u*2]+tree[u*2+1];
}
int ask(int u,int l,int r,int x){
if(l==r){
return tree[u];
}
int mid=(l+r)/2;
if(x<=mid)ask(u*2,l,mid,x);
else ask(u*2+1,mid+1,r,x);
}
int main(){
ios::sync_with_stdio(0);
cin >> n;
for(int i = 1;i<=n;i++)cin >> a[i];
build(1,1,n);
cin >> q;
while(q--){
cin >> k;
cout << ask(1,1,n,k) << endl;
}
return 0;
}