牛客小白月赛9-E 换个角度思考

牛客小白月赛9-E 换个角度思考_第1张图片

地址:https://ac.nowcoder.com/acm/contest/275/E

思路:主席树 || 树状数组

主席树

Code:

#include
#include
#include
using namespace std;

const int MAX_N=100005;
struct node{
	int x;
	int id;
	bool operator<(const node &p)const{
		return (x==p.x)?(id>1;
	if(x<=mid)	Update(x,tree[rt].l,l,mid);
	else	Update(x,tree[rt].r,mid+1,r);
}

int Query(int L,int R,int k,int l,int r)
{
	if(l==r)	return tree[R].sum-tree[L].sum;
	int mid=(l+r)>>1,ans=0;
	if(k<=mid)	ans=Query(tree[L].l,tree[R].l,k,l,mid);
	else	ans=Query(tree[L].r,tree[R].r,k,mid+1,r)+tree[tree[R].l].sum-tree[tree[L].l].sum;
	return ans;
}

树状数组:将所有询问按k由小到大排序,在遍历一遍,每次将<=k的元素更新即可

Code:

#include 
#include
#include
#include
using namespace std;

const int MAX_N=1e5+5;
struct node{
	int x;
	int id;
	bool operator<(const node &p)const{
		return (x==p.x)?(id0){
		res+=C[id];
		id-=Lowbit(id);
	}
	return res;
}

 

你可能感兴趣的:(算法,牛客,树状数组,主席树)