rt,数据结构模板,主要是用来保存,需要的也可以拿去用αωα
ST表(区间最大值模板):
#include
using namespace std;
const int N=1e5*2+10,M=18;
int w[N],f[N][M],n,m;
void init()
{
for(int j=0;j
单调队列模板:
#include
using namespace std;
const int N=1000010;
int a[N],q[N];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;iq[hh]) hh++;
while(hh<=tt and a[q[tt]]>=a[i]) tt--;
q[++tt]=i;
if(i>=k-1) printf("%d ",a[q[hh]]);
}
printf("\n");
hh=0,tt=-1;
for(int i=0;iq[hh]) hh++;
while(hh<=tt and a[q[tt]]<=a[i]) tt--;
q[++tt]=i;
if(i>=k-1) printf("%d ",a[q[hh]]);
}
return 0;
}
//题目链接:https://www.acwing.com/problem/content/description/156/
/************************************************/
#include
using namespace std;
const int N=300010,INF=1e9;
int n,m;
int s[N],q[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&s[i]),s[i]+=s[i-1];
int res=-INF;
int hh=0,tt=0;
for(int i=1;i<=n;i++)
{
if(q[hh]=s[i]) tt--;
q[++tt]=i;
}
printf("%d",res);
return 0;
}
//题目链接:https://www.acwing.com/problem/content/description/137/
树状数组模板:1 ,2
线段树模板:
(线段树2模板,洛谷P3373 )
#include
using namespace std;
typedef long long LL;?
const int N=100010;
int n,p,m;
int w[N];
struct Node?
{
int l,r;
int sum,add,mul;
}tr[N*4];?
void pushup(int u)
{
tr[u].sum=(tr[u<<1].sum+tr[u<<1|1].sum)%p;?
}
void eval(Node &t,int add,int mul)
{
t.sum=((LL)t.sum*mul+(LL)(t.r-t.l+1)*add)%p;?
t.mul=(LL)t.mul*mul%p;
t.add=((LL)t.add*mul+add)%p;
}
void pushdown(int u)?
{
eval(tr[u<<1],tr[u].add,tr[u].mul);
eval(tr[u<<1|1],tr[u].add,tr[u].mul);
tr[u].add=0,tr[u].mul=1;?
}
void build(int u,int l,int r)
{
if(l==r) tr[u]={l,r,w[r],0,1};?
else
{
tr[u]={l,r,0,0,1};?
int mid=(l+r)>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
pushup(u);
}
}?
void modify(int u,int l,int r,int add,int mul)
{
if(tr[u].l>=l and tr[u].r<=r) eval(tr[u],add,mul);?
else
{?
pushdown(u);
int mid=(tr[u].l+tr[u].r)>>1;?
if(l<=mid) modify(u<<1,l,r,add,mul);
if(r>mid) modify(u<<1|1,l,r,add,mul);
pushup(u);
}?
}?
int query(int u,int l,int r)
{
if(tr[u].l>=l and tr[u].r<=r) return tr[u].sum;
pushdown(u);
int mid=(tr[u].l+tr[u].r)>>1;??
int sum=0;
if(l<=mid) sum=qu?ery(u<<1,l,r);
if(r>mid) sum=(sum+query(u<<1|1,l,r))%p;
return sum;?
}
int main()
{
scanf("%d%d%d",&n,&p);?
for(int i=1;i<=n;i++) scanf("%d",&w[i]);?
build(1,1,n);?
scanf("%d",&m);?
while(m--)?
{?
int t,l,r,d;
scanf("%d%d%d", &t,&l,&r);?
if(t==1)?
{?
scanf("%d",&d);??
modify(1,l,r,0,d);?
}??
else if(t==2)?
{?
scanf("%d",&d);?
modify(1,l,r,d,1);?
}?
else printf("%d\n",query(1,l,r));?
}?
return 0;?
}
没了.平衡树模板(Treap,splay)到时候放