社区讨论

蒟蒻没有离散化20pts求助

P3834【模板】可持久化线段树 2参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi85zjqv
此快照首次捕获于
2025/11/21 09:11
4 个月前
此快照最后确认于
2025/11/21 09:11
4 个月前
查看原帖
蒟蒻不是刚学OI但是还是被刚学OI的吊起来锤OwO
洛谷提交20pts,SP3946提交AC,不知道为什么,求助dalao 和刚学OI
CPP
#include <cstdio>
using namespace std;
const int N=5000000;
const int L=-1000000005;
const int R=1000000005;
struct Seg_Tree{
    int ch[N][2],his[N],size[N],hn,cnt;
    void push_up(int p){size[p]=size[ch[p][0]]+size[ch[p][1]];}
    void insert(int x){
        his[++hn]=++cnt;add(his[hn-1],cnt,L,R,x);
    }
    void add(int la,int p,int l,int r,int x){
        if(l==r){
            ++size[p];return ;
        }
        int mid=(l+r)>>1;
        if(x>mid){
            ch[p][0]=ch[la][0];ch[p][1]=++cnt;
            add(ch[la][1],cnt,mid+1,r,x);
        }
        else{
            ch[p][1]=ch[la][1];ch[p][0]=++cnt;
            add(ch[la][0],cnt,l,mid,x);
        }
        push_up(p);
    }
    int kth(int tl,int tr,int nl,int nr,int k){
    	if(nl==nr) return nl;
    	int mid=(nl+nr)>>1;
    	if(k>size[ch[tr][0]]-size[ch[tl][0]]){
    	    k-=size[ch[tr][0]]-size[ch[tl][0]];
    	    return kth(ch[tl][1],ch[tr][1],mid+1,nr,k);
    	}
    	return kth(ch[tl][0],ch[tr][0],nl,mid,k);
    }
}hjt;
int main(){
    int n,m,x,l,r,k;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i) scanf("%d",&x),hjt.insert(x);
    for(int i=1;i<=m;++i){
        scanf("%d%d%d",&l,&r,&k);
        printf("%d\n",hjt.kth(hjt.his[l-1],hjt.his[r],L,R,k));
    }
    return 0;
} 
QAQ根本找不出来哪里错了好吗
I'm too weak

回复

3 条回复,欢迎继续交流。

正在加载回复...