C - A Simple Problem with Integers

2024-03-29 17:32
文章标签 problem simple integers

本文主要是介绍C - A Simple Problem with Integers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://cn.vjudge.net/contest/269834#problem/C

题目大意:区间更新和区间查询。

题解:lazy算法,加线段树。

代码:

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define inf 0x3f3f3f3f3f3fusing namespace std;struct node
{int l,r;long long num,lazy;
} s[1000000];long long  h[1000000];long long int creat(int t,int l,int r)//建树
{int mid=(l+r)>>1;if(l==r){s[t].l=l;s[t].r=r;s[t].lazy=0;return s[t].num=h[l];}s[t].l=l;s[t].r=r;s[t].lazy=0;return s[t].num=creat(t*2,l,mid)+creat(t*2+1,mid+1,r);
}void addre(int t,int l,int r,int e)//区间更新
{int mid=(s[t].l+s[t].r)>>1;if(s[t].l==l&&s[t].r==r){s[t].lazy+=e;return ;}s[t].num+=(r-l+1)*e;//这里是核心if(s[t].lazy!=0)//这里是核心{s[t*2+1].lazy+=s[t].lazy;s[t*2].lazy+=s[t].lazy;s[t].num+=(s[t].r-s[t].l+1)*s[t].lazy;s[t].lazy=0;}if(mid>=r){addre(t*2,l,r,e);}else if(mid<l){addre(t*2+1,l,r,e);}else{addre(t*2,l,mid,e);addre(t*2+1,mid+1,r,e);}
}long long  query(int t,int l,int r)//区间查询
{if(s[t].l==l&&s[t].r==r){return s[t].num+(s[t].r-s[t].l+1)*s[t].lazy;}int mid=(s[t].l+s[t].r)>>1;if(s[t].lazy!=0)//这里是核心{s[t*2+1].lazy+=s[t].lazy;s[t*2].lazy+=s[t].lazy;s[t].num+=(s[t].r-s[t].l+1)*s[t].lazy;s[t].lazy=0;}if(r<=mid){return query(t*2,l,r);}else if(l>mid){return query(t*2+1,l,r);}else{return query(t*2+1,mid+1,r)+query(t*2,l,mid);}
}int main()
{int a,b,c,d,e;char mm;while(~scanf("%d %d",&a,&b)){for(int i=1; i<=a; i++){scanf("%lld",&h[i]);}creat(1,1,a);for(int i=1; i<=b; i++){getchar();scanf("%c",&mm);if(mm=='C'){scanf("%d %d %d",&c,&d,&e);addre(1,c,d,e);}else if(mm=='Q'){scanf("%d %d",&c,&d);printf("%lld\n",query(1,c,d));}}}return 0;
}

 

这篇关于C - A Simple Problem with Integers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859206

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {

HDU 1016 Prime Ring Problem (深搜)

OJ题目 : click here ~~ 大概题意:n个数,形成一个环,使得相邻两个数的和为素数。以1开始,按字典序输出序列。 很简单的深搜。 AC_CODE int n;int visit[22];int num[22];int len;bool Is_prime(int x){for(int i = 2;i*i <= x;i++)if(x%i == 0) return

使用django-simple-captcha遇到的坑

使用django-simple-captcha遇到的坑 一站点gongshare.com在做注册功能时验证码采用的django-simple-captcha,因为笔者开发环境采用的Windows 64bit系统,结果安装使用的时候接二连三遇到好几个坑。 django-simple-captcha需要依赖django1.3+、PIL1.1.7+或者Pillow2.0+,根据文档安装后开始使用时,

LVM 'Can’t open /dev/sdb1 exclusively. Mounted filesystem?' Problem

在将几块盘做LVM时,遇到一个之前都没遇到过的问题: root@ubuntu:~# pvcreate /dev/sdc1Can't open /dev/sdc1 exclusively. Mounted filesystem? 首先第一反应就是查看这个分区是否已经在使用了,但是没有。 查看硬盘的一些信息: root@ubuntu:~# cat /proc/partitionsmajo

HYPERCASUAL - Simple Characters(卡通游戏火柴人物模型)

介绍HyperCasual - 简单角色! 一套低多边形角色资源,用于创建超休闲风格的游戏。 包含演示场景 角色(x10) 生化人、小丑、Flaty_Boss、女孩、守门员、英雄、亚马逊女战士、男人、红衣男人、修理工 每个网格大约有700-2000个顶点 角色设置与Mecanim兼容(本包中不包含动画) 着色器适用于可编写脚本的渲染管线(HD + LW) 下载:​​Unity资源商店链接资源

【HDU】3861 The King’s Problem 强连通缩点+有向图最小路径覆盖

传送门:【HDU】3861 The King’s Problem 题目分析:首先强连通缩点,因为形成一个环的王国肯定在一条路径中,这样才能保证拆的少。 然后缩点后就是DAG图了,由于题目要求的是最小路径覆盖,那么二分匹配即可。 代码如下: #include <cstdio>#include <cstring>#include <algorithm>#includ

【ZOJ】3362 Beer Problem 最小费用流

传送门:【ZOJ】3362 Beer Problem 题目分析:这道题本来应该很快就AC的,但是!因为我以前犯的一个致命错误导致我这题一天了到现在才调出来!唉。。失策。。貌似给的模板也有这个错误。。。马上就去改。。但是这个错误竟然还能过掉那么多的题。。害我还要一题一题的改回去。。 本题就是赤裸裸的最小费用流。 新建汇点t(源点即1),将所有的n-1个城市和汇点建边,容量为无穷大,