每日一贴,今天的内容关键字为树线段
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 52 Solved: 24
[
][
][
]
每次x=1时,每行一个整数,表示这次游览的高兴度
对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9
不用犹豫,本题正宗线段树。
不过线段树不支持区间开方,但是10^9最多开5次方就到1了-_-
所以暴力改也就MAXN*5 无压力。
用线段树存储一段是不是须要开方(2-须要,1-不用)+暴力改
无压力
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #include<cctype> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define RepD(i,n) for(int i=n;i>=0;i--) #define MAXN (200000+10) #define MAXM (400000+10) #define Lson (x<<1) #define Rson ((x<<1)+1) int n,m,a[MAXN*2]={0},b[MAXN*2]={0}; long long sum[MAXN*2]; void update(int x) { if (b[Lson]==2||b[Rson]==2) b[x]=2; else b[x]=1; sum[x]=sum[Lson]+sum[Rson]; } void build(int x,int l,int r) { if (l==r) { scanf("%d",&a[x]);sum[x]=a[x]; if (a[x]<=1) b[x]=1; else b[x]=2; } if (l>=r) return; int m=(l+r)>>1; build(Lson,l,m); build(Rson,m+1,r); update(x); } void pushdown(int x,int l,int r) { if (b[x]<=1) return; if (l==r) { a[x]=sum[x]=sqrt(a[x]); if (a[x]<=1) b[x]=1; return; } int m=(l+r)>>1; pushdown(Lson,l,m); if (m<r) pushdown(Rson,m+1,r); update(x); } void change(int x,int l,int r,int L,int R) { if (b[x]<=1) return; int m=(l+r)>>1; if (L<=l&&r<=R) { pushdown(x,l,r); return; } if (L<=m) change(Lson,l,m,L,R); if (m<R) change(Rson,m+1,r,L,R); update(x); } long long qur(int x,int l,int r,int L,int R) { int m=(l+r)>>1; if (L<=l&&r<=R) { return sum[x]; } long long ans=0; if (L<=m) ans+=qur(Lson,l,m,L,R); if (m<R) ans+=qur(Rson,m+1,r,L,R); return ans; } int main() { // freopen("bzoj3211.in","r",stdin); // freopen(".out","w",stdout); scanf("%d",&n); build(1,1,n); scanf("%d",&m); For(i,m) { int x,l,r; scanf("%d%d%d",&x,&l,&r); if (x==1) printf("%lld\n",qur(1,1,n,l,r)); else change(1,1,n,l,r); } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 关于编程语言
如果 C++是一把锤子的话,那么编程就会变成大手指头。
如果你找了一百万只猴子来敲打一百万个键盘,那么会有一只猴子会敲出一 段 Java 程序,而其余的只会敲出 Perl 程序。
一阵急促的敲门声,“谁啊!”,过了 5 分钟,门外传来“Java”。
如果说 Java 很不错是因为它可以运行在所有的操作系统上,那么就可以说 肛交很不错,因为其可以使用于所有的性别上。
--------------------------------- 原创文章 By
树和线段
---------------------------------