zoukankan      html  css  js  c++  java
  • codevs 4919 线段树练习4

    线段树水题。我是ziliuziliu,我是最强的
    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 100500 using namespace std; int n,a[maxn],m; int sum[maxn<<2][8],lazy[maxn<<2],tot=0,root,ls[maxn<<2],rs[maxn<<2]; int aa,bb,x; char type[5]; void pushup(int now) { for (int i=0;i<=6;i++) sum[now][i]=sum[ls[now]][i]+sum[rs[now]][i]; } void pushdown(int now) { if (lazy[now]==0) return; int regis[10]; for (int i=0;i<=6;i++) regis[i]=sum[ls[now]][i]; for (int i=0;i<=6;i++) sum[ls[now]][(i+lazy[now])%7]=regis[i]; for (int i=0;i<=6;i++) regis[i]=sum[rs[now]][i]; for (int i=0;i<=6;i++) sum[rs[now]][(i+lazy[now])%7]=regis[i]; lazy[ls[now]]+=lazy[now];lazy[rs[now]]+=lazy[now]; lazy[now]=0; } void build(int &now,int left,int right) { now=++tot;lazy[now]=0; if (left==right) { sum[now][a[left]%7]++; return; } int mid=(left+right)>>1; build(ls[now],left,mid); build(rs[now],mid+1,right); pushup(now); } void modify(int now,int left,int right,int l,int r,int x) { pushdown(now); if ((left==l) && (right==r)) { lazy[now]+=x; int regis[10]; for (int i=0;i<=6;i++) regis[i]=sum[now][i]; for (int i=0;i<=6;i++) sum[now][(i+x)%7]=regis[i]; return; } int mid=(left+right)>>1; if (r<=mid) modify(ls[now],left,mid,l,r,x); else if (l>=mid+1) modify(rs[now],mid+1,right,l,r,x); else { modify(ls[now],left,mid,l,mid,x); modify(rs[now],mid+1,right,mid+1,r,x); } pushup(now); } int ask(int now,int left,int right,int l,int r) { pushdown(now); if ((left==l) && (right==r)) return sum[now][0]; int mid=(left+right)>>1; if (r<=mid) return ask(ls[now],left,mid,l,r); else if (l>=mid+1) return ask(rs[now],mid+1,right,l,r); else return ask(ls[now],left,mid,l,mid)+ask(rs[now],mid+1,right,mid+1,r); } int main() { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); build(root,1,n); scanf("%d",&m); for (int i=1;i<=m;i++) { scanf("%s",type); if (type[0]=='a') { scanf("%d%d%d",&aa,&bb,&x); modify(root,1,n,aa,bb,x); } else { scanf("%d%d",&aa,&bb); printf("%d ",ask(root,1,n,aa,bb)); } } return 0; }
  • 相关阅读:
    那些好的句子
    ❤️博客使用说明-飞沙
    求n以内,除5的倍数的和
    C# 枚举
    2021年bilibili程序员节日
    MT管理器使用技巧
    腾讯找人工客服
    校报白皮书
    C语言教程(下)
    svn版本控制
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5648364.html
Copyright © 2011-2022 走看看