文章

5

粉丝

176

获赞

6

访问

25.9k

头像
Minimum_Sum 题解:
P1910 华东师范大学2022年机试
发布于2023年9月19日 19:46
阅读数 869

可持久化线段树模版题

根据下标建立主席树,每次查询区间中间的数所处的位置,然后区间求和

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
struct node{
    int l,r;
    int cnt,sum;
}tr[N << 5];
int idx = 0;
vector<int> v;
int a[N];
int root[N];
inline int get(int x){
    return lower_bound(v.begin(),v.end(),x) - v.begin() + 1;
}
void insert(int l,int r,int pre,int &now,int val){
    tr[++ idx] = tr[pre];
    now = idx;
    tr[now].cnt ++;
    tr[now].sum += v[val - 1];
    if(l == r) return ;
    int mid = (l + r) >> 1;
    if(val <= mid) insert(l,mid,tr[pre].l,tr[now].l,val);
    else insert(mid + 1,r,tr[pre].r,tr[now].r,val);
}
int query(int l,int r,int L,int R,int k){
    if(l == r) return l;
    int mid = (l + r) >> 1;
    int tmp = tr[tr[R].l].cnt - tr[tr[L].l].cnt;
&nbs...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发