题目:A Simple Problem with Integers

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
const int N = 50100;
struct node
{
int l;
int r;
int w;
int add[55] ;
}p[N*4];
int a[N], b[11][11];
void build(int x,int l,int r)
{
p[x].l = l;
p[x].r = r;
memset(p[x].add,0,sizeof(p[x].add));
if(l == r)
{
p[x].w = a[l];
return ;
}
int mid = (l + r)>>1;
build(2*x,l,mid);
build(2*x+1,mid+ 1,r);
p[x].w = p[x*2].w + p[x*2+1].w ;
}
void push_down(int x)
{
if(p[x].w)
{
p[x*2].w +=p[x].w;
p[x*2+1].w +=p[x].w;
p[x].w = 0;
for(int i =0  ; i < 55;i++)
{
p[x*2].add[i] +=p[x].add[i];
p[x*2+1].add[i]+=p[x].add[i];
p[x].add[i] = 0;
}
}
}
void update(int x,int l,int r,int num,int i,int j)
{
if(p[x].l == l&&p[x].r == r)
{
p[x].w +=num;
p[x].add[b[i][j]]+=num ;
return ;
}
push_down(x);
int mid = (p[x].l + p[x].r)>>1 ;
if(l > mid)update(x*2+1,l,r,num,i,j);
else
{
if(r<=mid)
update(x*2,l,r,num,i,j);
else
{
update(x*2,l,mid,num,i,j);
update(x*2+1,mid+1,r,num,i,j);
}
}
}
int query(int x,int pos)
{
if(p[x].l == pos&&p[x].r == pos)
{
int tmp = 0;
for(int i = 1 ; i <= 10 ;i++)
tmp+=p[x].add[b[i][pos%i]];
return tmp + a[pos] ;
}
push_down(x) ;
int mid = (p[x].l + p[x].r)>> 1;
if(pos <= mid)
return   query(2*x,pos);
else
return query(x*2+1,pos);
}
int main()
{
int  n,s,e,k,c,i,j,q,ty;
int cnt = 0;
for(i = 1; i<= 10;i++)
{
for(j = 0;j< i;j++)
b[i][j] = cnt++;           //由于内存卡的紧,所以这样编号,不能开 10*10 的
}
while(scanf("%d",&n)!=EOF)
{
for(i =1  ; i <=n;i++)
{
scanf("%d",&a[i]) ;
}
build(1,1,n);
scanf("%d",&q);
while(q--)
{
scanf("%d",&ty);
if(ty==1)
{
scanf("%d%d%d%d",&s,&e,&k,&c);
update(1,s,e,c,k,s%k);          //这里为什么是 s% k 呢 ,因为 :
}                                   //(i- s)%k = (i%k - s%k + k)%k = 0 的话 i%k 应该  = s%k ;
else
{
int  pos;
scanf("%d",&pos);
int ans = query(1,pos);
printf("%d\n",ans);
}
}
}
return 0;
}

HDU4267(2012长春网络赛)相关推荐

  1. 2012 成都网络赛小记

    一直想以优质的文章回馈互联网,无奈本菜太弱,只得修炼一段时日再一类类的总结 好了,废话不多说,今天的网络赛状态还好,只是有点小遗憾,DP太弱了 1001:一看就是裸的线段树,然后回想一下省赛的题,区间 ...

  2. hdu5442(2015长春网络赛F题)

    题意: 给出一个字符串,只由'a'~'z'组成,字符串是一个首尾相接的串.我们要找到一个起点,顺时针或者逆时针的读这个串,找到字典序最大的读法,如果有多种,输出起点坐标小的那个,如果起点坐标一样,输出 ...

  3. hdu5446(2015长春网络赛J题)

    题意: 求C(n,m)%(p1*p2*......pk),其中,p1*p2*......pk都是素数. 思路: 不会...数论是渣,赛后知道是Lucas定理+中国剩余定理. 代码: #include& ...

  4. hdu5441(2015长春网络赛E题)

    题意: 给出一个n个点.m条边的无向图,边上有权值,有q组询问,每组询问给出一个数字x,我们要在图中找出'点对'的个数,这些'点对'(例如a,b)满足从a到b有一条路径经过的每一条边都要小于x,输出每 ...

  5. hdu5444(2015长春网络赛H题)

    题意: 给出一棵树的描述,这棵树构造出来,满足从右到左数值递增,根在最下面,然后有一些询问x,我们要输出从根走到x的路径,w:向左.e:向右. 思路: 建树的时候,首先第一个点一定是根,然后比根小的建 ...

  6. hdu5443(2015长春网络赛G题)

    题意: 一个数列,求从L到R的最大值. 思路: 不多说... 代码: #include<cstdio> #include<cstring>int a[20000];int ma ...

  7. hdu5438(2015长春网络赛B题)

    题意: 有n个池塘.m个管道,每个池塘有权值,m个管道用来连接池塘(无向边),我们要把度小于2的池塘删除,统计每个包含池塘数是奇数的连通分量的权值并输出. 思路: 拓扑排序之后,删点,然后dfs一遍就 ...

  8. hdu5437(2015长春网络赛A题)

    题意: 有一个party,会有n个人来,每个人都带着礼物来,礼物有权值,由于屋子的大小有限,所以他会选择k个时间来开门,在t时间让p个人进来,接下来有q组询问,每组询问有一个数字ni,让你输出第ni个 ...

  9. 2012成都网络赛赛后【缺CHJ】

    A Coder (HDU 4288,与Codeforces 85D相同) 应该用线段树写,我是块状链表水过了 #include<map>#include<cstdio>#inc ...

最新文章

  1. 【springboot】配置
  2. 计算机视觉研究生文献和复现哪个更重要?
  3. SQL Case when 的使用方法
  4. (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)(C/C++存储类型总结)(内存管理)
  5. JavaScript3基础——运算符和类型转换
  6. subprogram or cursor is declared in a package specification and must be defined in the package body
  7. java线程池(ThreadPool)
  8. StringIO类的用途
  9. LeetCode 旋转数组 系列
  10. 网络基础四 DNS DHCP 路由 FTP
  11. python时间模块time
  12. C#中yield关键字及注意事项
  13. gephi java教程_为Gephi准备数据
  14. JAVA注释 关键字 标识符 常量 变量 数据类型 大小 类型转换 字符类型 (算术 赋值 自增自减 比较 逻辑短路现象 位移 三元) 运算符
  15. xp系统下硬盘安装linux,在NTFS格式硬盘XP下安装LINUX系统
  16. 用计算机如何算针入度指数,沥青针入度指数怎么计算?需要计算公式,最好说的详细一点!...
  17. CMD命令行高级教程精选合编合集
  18. 蓝桥杯2020年第十一届C/C++B组(第一次)省赛习题题解
  19. 塑胶模具报价计算原理方法与程序
  20. abp集成abp.Dapper

热门文章

  1. Redis客户端命令行redis-cli操作
  2. MyBatis常用配置解析-environments标签
  3. 订单操作-表结构分析与表创建
  4. 分布式锁编写及调试分析
  5. alchemy php,Python下SQLAlchemy的简单介绍
  6. mysql导入多条数据语句_MySQL插入多条记录和REPLACE语句
  7. oracle解析select,oracle_select语句例子解析
  8. 【图文详解】第一个Java程序HelloWorld详解,写Java程序需要注意什么
  9. koa-mysql(三)
  10. docker-ce私有仓库搭建