http://codevs.cn/problem/4919/

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 查看运行结果
 
 
题目描述 Description

给你N个数,有两种操作

1:给区间[a,b]内的所有数都增加X

2:询问区间[a,b]能被7整除的个数

输入描述 Input Description

第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数。如果第一个数是add,后接3个正整数a,b,X,表示在区间[a,b]内每个数增加X,如果是count,表示统计区间[a,b]能被7整除的个数

输出描述 Output Description

对于每个询问输出一行一个答案

样例输入 Sample Input

2 3 4
6
count 1 3
count 1 2
add 1 3 2
count 1 3
add 1 3 3
count 1 3
样例输出 Sample Output

0

0

0

1

数据范围及提示 Data Size & Hint

10%:1<N<=10,1<Q<=10

30%:1<N<=10000,1<Q<=10000

100%:1<N<=100000,1<Q<=100000

 #include <algorithm>
#include <cstdio> using namespace std; const int N(+);
int n,x,y,z,q; #define lc (now<<1)
#define rc (now<<1|1)
#define mid (l+r>>1)
struct AC_Tree
{
int val[],flag;
}tree[N<<];
inline void pushup(int now)
{
for(int i=;i<;i++)
tree[now].val[i]=tree[lc].val[i]+tree[rc].val[i];
}
inline void pushdown(int now)
{
int temp[],flag=tree[now].flag; tree[now].flag=;
tree[lc].flag+=flag; tree[rc].flag+=flag;
for(int i=;i<;i++) temp[i]=tree[lc].val[i];
for(int i=;i<;i++) tree[lc].val[((i+flag)%)]=temp[i];
for(int i=;i<;i++) temp[i]=tree[rc].val[i];
for(int i=;i<;i++) tree[rc].val[((i+flag)%)]=temp[i];
}
void Build(int now,int l,int r)
{
if(l==r)
{
scanf("%d",&x);
tree[now].val[x%]++;
return ;
}
Build(lc,l,mid);
Build(rc,mid+,r);
pushup(now);
}
void Change(int now,int l,int r,int L,int R,int x)
{
if(l==L&&r==R)
{
int temp[];
tree[now].flag+=x;
for(int i=;i<;i++) temp[i]=tree[now].val[i];
for(int i=;i<;i++) tree[now].val[(i+x)%]=temp[i];
return ;
}
if(tree[now].flag) pushdown(now);
if(R<=mid) Change(lc,l,mid,L,R,x);
else if(L>mid) Change(rc,mid+,r,L,R,x);
else Change(lc,l,mid,L,mid,x),Change(rc,mid+,r,mid+,R,x);
pushup(now);
}
int Query(int now,int l,int r,int L,int R)
{
if(l==L&&r==R) return tree[now].val[];
if(tree[now].flag) pushdown(now);
if(R<=mid) return Query(lc,l,mid,L,R);
else if(L>mid) return Query(rc,mid+,r,L,R);
else return Query(lc,l,mid,L,mid)+Query(rc,mid+,r,mid+,R);
} int main()
{
scanf("%d",&n);
Build(,,n);
scanf("%d",&q);
for(char s[];q--;)
{
scanf("%s%d%d",s,&x,&y);
if(s[]=='a')
{
scanf("%d",&z);
Change(,,n,x,y,z);
}
else printf("%d\n",Query(,,n,x,y));
}
return ;
}

CodeVs——T 4919 线段树练习4的更多相关文章

  1. codevs 4919 线段树练习4

    线段树水题.我是ziliuziliu,我是最强的#include<iostream> #include<cstdio> #include<cstring> #inc ...

  2. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  3. codevs 1690 开关灯 线段树+延迟标记

    1690 开关灯  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...

  4. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  5. Codevs 4373 窗口(线段树 单调队列 st表)

    4373 窗口 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 给你一个长度为N的数组,一个长为K的滑动的窗体从最左移至最右端,你只 ...

  6. 【codevs】1082 线段树练习 3 <区间修改+区间和>

    题目连接   http://codevs.cn/problem/1082/ Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. In ...

  7. COdeVS——T 1082 线段树练习 3 (分块练习)

    http://codevs.cn/problem/1082/ 时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解       题目描述 Descriptio ...

  8. codevs 1690 开关灯 线段树水题

    没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...

  9. AC日记——线段树练习4 codevs 4919

    4919 线段树练习4  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 给你N个数,有两种操作 ...

随机推荐

  1. 注解:@SuppressWarning()的用法

    @SuppressWarning() 作用:J2SE 提供的一个批注或者注解.该批注的作用是给编译器一条指令,忽略这些警告信息. 常用:unchecked,serial. 1.如果传入多种情况,这几种 ...

  2. 51nod 正整数分组

    将一堆正整数分为2组,要求2组的和相差最小. 显然我们可以把所有可能组合成的数求出来. 然后从总和的中间开始往大找,找到了就是其中一个的分组,就可以求出答案了. #include<cstdio& ...

  3. Spring Cloud学习笔记【一】Eureka服务注册与发现

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  4. 洛谷——P1155 双栈排序

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

  5. 关于Shiro的退出请求是如何关联到登录请求的思考

    一.结论 先给出结论,是因为本身是很简单的道理.假设我们没有使用任何认证授权的框架,就简单的使用Cookie和HttpSession,那么用户登录后的每一个请求是如何关联上这个用户的呢?答案很简单,由 ...

  6. .Net 程序在自定义位置查找托管/非托管 dll 的几种方法

    原文:.Net 程序在自定义位置查找托管/非托管 dll 的几种方法 一.自定义托管 dll 程序集的查找位置 目前(.Net4.7)能用的有2种: #define DEFAULT_IMPLEMENT ...

  7. 洛谷——P1498 南蛮图腾

    https://www.luogu.org/problem/show?pid=1498 题目描述 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往 ...

  8. 洛谷——P1307 数字反转

    https://www.luogu.org/problem/show?pid=1307#sub 题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原 ...

  9. cocoapod卡在了analyzing dependencies

    尽管公司的项目没有使用cocoapod,可是有一些第三方库本身依赖其它第三方的库,而且是用cocoapod来管理这些依赖的.所以在使用某些第三方库时.还是须要用到cocoapod的.今天在github ...

  10. Android开发经验之在图片上随意点击移动文字

    只要在图片范围之内,文字可随意点击移动. package xiaosi.GetTextImage; import android.content.Context; import android.con ...