首页 > 其他分享 >普通树模板

普通树模板

时间:2023-03-19 13:44:06浏览次数:37  
标签:int lowbit ll t3 普通 ans t4 模板

笛卡尔树

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int read(){
	int x=0,f=1;char c=getchar();
	while(c>'9' || c<'0'){if(c=='-')f=-1;c=getchar();}
	while(c>='0' && c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return x*f;
}
int n,p[N],s[N],tot,l[N],r[N],flag,root;
int q[N],head,tail;long long ans1,ans2;
signed main(){
	n=read();for(int i=1;i<=n;i++)p[i]=read();
	for(int i=1;i<=n;i++){
		flag=0;
		while(tot && p[s[tot]]>p[i])tot--,flag=1;
		if(tot)r[s[tot]]=i;
		else root=i;
		if(flag)l[i]=s[tot+1];
		s[++tot]=i;
	}
	q[++tail]=root;head=1;
	while(head<=tail){
		ans1^=(long long)q[head]*(l[q[head]]+1),ans2^=(long long)q[head]*(r[q[head]]+1);
		if(l[q[head]])q[++tail]=l[q[head]];
		if(r[q[head]])q[++tail]=r[q[head]];
		head++;
	}
	printf("%lld %lld\n",ans1,ans2);
	return 0;
}

树状数组

int lowbit(int x){
	return x&(-x);
}
void add(int i,int k){
	for(int j=i;j<=n;j+=lowbit(j))c[j]+=k;
	return;
}
int getsum(int i){
	int res=0;for(int j=i;j>0;j-=lowbit(j))res+=c[j];
	return res; 
}

树状数组(区间修改 区间查询)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=201000;
ll n,m;
ll a[N],b[N],c[N],t[N],t1,t2,t3,t4;
ll lowbit(ll x){
	return x&(-x);
}
void add(ll x,ll y){
	for(ll i=x;i<=n;i+=lowbit(i))
		c[i]+=y;
	return;
}
void addt(ll x,ll y){
	for(ll i=x;i<=n;i+=lowbit(i))
		t[i]+=y;
	return;
}
ll ask(ll x){
	ll res=0;
	for(ll i=x;i;i-=lowbit(i))
		res+=c[i];
	return res;
}
ll askt(ll x){
	ll res=0;
	for(ll i=x;i;i-=lowbit(i))
		res+=t[i];
	return res;
}
ll search(ll x){
	return ask(x)*(x+1)-askt(x);
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(ll i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i]-a[i-1];
		add(i,b[i]);
		addt(i,b[i]*i);
	}
	for(int i=1;i<=m;i++){
		cin>>t1;
		if(t1==1){
			cin>>t2>>t3>>t4;
			add(t2,t4),add(t3+1,-t4);
			addt(t2,t4*t2),addt(t3+1,-(t4*(t3+1)));
		}
		if(t1==2){
			cin>>t2>>t3;
			cout<<search(t3)-search(t2-1)<<endl;
		}
	}
	return 0;
}

树状数组+值域

#include<bits/stdc++.h>
#define N 200020
#define lowbit(i) (i&-i)
using namespace std;
pair<int, int> a[N];
int DP[N], C[N];
void ins(int x, int c) {
    for (int i = x; i < N; i += lowbit(i))
        C[i] = max(C[i], c);
}
int ask(int x) {
    int ans = 0;
    for (int i = x; i; i -= lowbit(i))
        ans = max(ans, C[i]);
    return ans;
}
int main() {
    int n, v;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> v;
        a[i].first = v; a[i].second = i + 1;
    }
    sort(a, a + n);
    for (int i = 0; i < n; i++)
        DP[i] = ask(a[i].second) + 1,
        ins(a[i].second, DP[i]);
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans = max(ans, DP[i]);
    cout << ans << endl;
}

二维树状数组

#include<bits/stdc++.h>
using namespace std;
int c[310][310],mp[310][310];
int read(){
	int x=0,f=1;char c=getchar();
	while(c>'9' || c<'0'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0' && c<='9'){
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	return x*f;
}
int lowbit(int v){
	return v&(-v);
}
void add(int x,int y,int va){
	for(int i=x;i<=300;i+=lowbit(i))
		for(int j=y;j<=300;j+=lowbit(j))
			c[i][j]+=va;
	return;
}
int query(int x,int y){
	int res=0;
	for(int i=x;i;i-=lowbit(i))
		for(int j=y;j;j-=lowbit(j))
			res+=c[i][j];
	return res;
} 
int n,m,Q,opt,t1,t2,t3,t4,k;
int main(){
	return 0;
} 

标签:int,lowbit,ll,t3,普通,ans,t4,模板
From: https://www.cnblogs.com/FJOI/p/17232938.html

相关文章

  • C++模板特化,Concept,typename
    typenameT,表示T为类型,而不是变量那,T::A是什么?T可以是我们自己写的类,那T::A就是成员变量或成员函数,另外,T::A还可以是类型,T内定义的类型所以,编译器需要区分,T::A到底是什么......
  • 【FreeMarker模板引擎】5.freemarker结合Struts2使用
    上一篇讲解了Freemarker与Servlet的结合,这里我们讲解一下Freemarker与Struts2的结合。同样首先创建一个WebProject工程:将Struts2的相关核心jar包和F......
  • 【FreeMarker模板引擎】4.freemarker结合Servlet使用
    之前讲解了freemarker的基础知识和数据结构,以及freemarker的样例。下面我们将结合JavaWeb和其它框架来使用freemarker作为视图框架。一、Freemark......
  • 【FreeMarker模板引擎】3.freemarker命名空间
    上一篇我们讨论了freemarker的数据结构、控制语句的基础知识和使用技巧,本篇我们介绍一下freemarker的命名空间。一、命名空间简介和使用对于“命......
  • Spring Boot Thymeleaf 模板引擎
    我们之前开发,我们需要将前端转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据的显示,及交互等。jsp支持非常强大的功能,包括能写Java......
  • Vue2入门之超详细教程三-初识模板语法
    1、简介模板语法就是按照固定的模板去书写代码,分为插值语法和指令语法。差值语法:功能:用于解析标签体内容写法:{{xxxx}},xxx是js表达式,且可以读取......
  • 基础算法模板之区间离散化与合并
    区间离散化将数量很少但数值很大的区间下标有序映射到一个集中的区间内,并可以根据原下标x迅速找到(二分)新下标vector<int>alls;//存储所有可能下标sort(alls.begin(......
  • 基础算法模板之前缀和与差分
    前缀和规定数列{\(a_i\)}的前缀和为\(S_i\)=\(\sum{_{k=1}^i}a_k\),常用于使用o(1)的时间计算某段区间求和//一维前缀和S[i]=S[i-1]+a[i];//前缀和初始化,i......
  • .net6 使用iTextSharp操作PDF模板
       一、首先要通过Adobe制作好PDF模板,目前发现只能通过这个工具才能制作PDF模板Adobe自己去官网下载,不过官网是要订阅的。或者自己去找破解版也行;下载后废话不多......
  • 将一个普通方法改写为异步方法
    如何将一个普通方法改写成异步方法? ///<summary>///把一个普通无参,无返回值的方法转为异步方法///</summary>///<paramname="srcAct......