题解 a+b问题
Posted juruo-zzt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 a+b问题相关的知识,希望对你有一定的参考价值。
题目:输入两个不超过10000的正整数,输出这两个数的和
题解:
前方高能
一道线段树模板题~
上代码:
#include<bits/stdc++.h>
using namespace std;
#define N 10000
struct Tree {int l,r,len;}a[N<<2+10];
int b[N<<2+10],num[N+10];
void Build(int l,int r,int s)
{
a[s].l=l;
a[s].r=r;
a[s].len=r-l+1;
if(l==r)
{
b[s]=num[l];
return;
}
int mid=(r+l)>>1;
Build(l,mid,s<<1);
Build(mid+1,r,(s<<1)|1);
b[s]=b[s<<1]+b[(s<<1)|1];
}
int query(int l,int r,int s)
{
if(a[s].l>=l&&a[s].r<=r) return b[s];
int ans=0;
if(a[s<<1].r>=l) ans+=query(l,r,s<<1);
if(a[(s<<1)|1].l<=r) ans+=query(l,r,(s<<1)|1);
return ans;
}
inline int Read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int main()
{
int n=Read(),m=Read();
int maxn=n>m?n:m;
fill(num+1,num+maxn+1,1);
Build(1,maxn,1);
printf("%d",query(1,n,1)+query(1,m,1));
return 0;
}
but...
以上是关于题解 a+b问题的主要内容,如果未能解决你的问题,请参考以下文章
[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段