1164 - Horrible Queries
Time Limit: 2 second(s) | Memory Limit: 64 MB |
World is getting more evil and it's getting tougher to get into the Evil League of Evil. Since the legendary Bad Horse has retired, now you have to correctly answer the evil questions of Dr. Horrible, who has a PhD in horribleness (but not in Computer Science). You are given an array of n elements, which are initially all 0. After that you will be given q commands. They are -
- 0 x y v - you have to add v to all numbers in the range of x to y (inclusive), where x and y are two indexes of the array.
- 1 x y - output a line containing a single integer which is the sum of all the array elements between x and y (inclusive).
The array is indexed from 0 to n - 1.
Input
Input starts with an integer T (≤ 5), denoting the number of test cases.
Each case contains two integers n (1 ≤ n ≤ 105) and q (1 ≤ q ≤ 50000). Each of the next q lines contains a task in one of the following form:
0 x y v (0 ≤ x ≤ y < n, 1 ≤ v ≤ 1000)
1 x y (0 ≤ x ≤ y < n)
Output
For each case, print the case number first. Then for each query '1 x y', print the sum of all the array elements between x and y.
Sample Input |
Output for Sample Input |
2 10 5 0 0 9 10 1 1 6 0 3 7 2 0 4 5 1 1 5 5 20 3 0 10 12 1 1 11 12 1 19 19 |
Case 1: 60 13 Case 2: 2 0 |
Note
Dataset is huge. Use faster i/o methods.
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<map>
8 #include<math.h>
9 using namespace std;
10 typedef long long LL;
11 LL tree[6*100005];
12 LL cnt[6*100005];
13 LL aa[100005];
14 void down(int k);
15 void up(int k,int v);
16 LL ask(int l,int r,int k,int n,int m);
17 void in(int l,int r,int k,int n,int m,int u);
18 int main(void)
19 {
20 int i,j,k;
21 scanf("%d",&k);
22 int s;
23 int n,m;
24 for(s=1; s<=k; s++)
25 {
26 scanf("%d %d",&n,&m);
27 memset(tree,0,sizeof(tree));
28 memset(cnt,0,sizeof(cnt));
29 int flag=0;
30 while(m--)
31 {
32 int x,y;
33 int xx,yy,zz;
34 scanf("%d",&x);
35 if(x==0)
36 {
37 scanf("%d %d %d",&xx,&yy,&zz);
38 in(xx,yy,0,0,n-1,zz);
39 }
40 else
41 {
42 scanf("%d %d",&xx,&yy);
43 LL as=ask(xx,yy,0,0,n-1);
44 aa[flag++]=as;
45 }
46
47 }
48 printf("Case %d:\n",s);
49 for(i=0; i<flag; i++)
50 printf("%lld\n",aa[i]);
51 }
52 }
53 void down(int k)
54 {
55 cnt[2*k+1]+=cnt[k];
56 cnt[2*k+2]+=cnt[k];
57 cnt[k]=0;
58 }
59 void up(int k,int v)
60 {
61 int cc=k;
62 tree[cc]+=cnt[k]*v;
63 if(cc==0)return ;
64 while(cc>=0)
65 {
66 cc=(cc-1)/2;
67 tree[cc]=tree[2*cc+1]+tree[2*cc+2];
68 if(cc==0)
69 return ;
70 }
71 }
72 LL ask(int l,int r,int k,int n,int m)
73 {
74 if(l>m||r<n)
75 {
76 if(cnt[k]>0)
77 {
78 up(k,m-n+1);
79 down(k);
80 }
81 return 0;
82 }
83 else if(l<=n&&r>=m)
84 {
85 if(cnt[k]>0)
86 {
87 up(k,m-n+1);
88 down(k);
89 return tree[k];
90 }
91 else return tree[k];
92 }
93 else
94 {
95 if(cnt[k]>0)
96 {
97
98 down(k);
99 }
100 LL nx=ask(l,r,2*k+1,n,(n+m)/2);
101 LL ny=ask(l,r,2*k+2,(n+m)/2+1,m);
102 return nx+ny;
103 }
104 }
105 void in(int l,int r,int k,int n,int m,int u)
106 {
107 if(l>m||r<n)
108 {
109 if(cnt[k]>0)
110 {
111 up(k,m-n+1);
112 down(k);
113 }
114 return ;
115 }
116 else if(l<=n&&r>=m)
117 {
118 cnt[k]+=u;
119 up(k,m-n+1);
120 down(k);
121 return ;
122 }
123 else
124 {
125 if(cnt[k]>0)
126 {
127
128 down(k);
129 }
130 in(l,r,2*k+1,n,(n+m)/2,u);
131 in(l,r,2*k+2,(n+m)/2+1,m,u);
132 }
133 }
1164 - Horrible Queries的更多相关文章
- 题解【SP8002】HORRIBLE - Horrible Queries
题面 题解 这是一道线段树的模板题. 题目需要我们维护一个支持区间修改.区间查询的一个数据结构,很容易想到线段树. 然后发现和洛谷上线段树的模板1是同一道题. 由于本题中每个数的初始值都为\(0\), ...
- GSS4 2713. Can you answer these queries IV 线段树
GSS7 Can you answer these queries IV 题目:给出一个数列,原数列和值不超过1e18,有两种操作: 0 x y:修改区间[x,y]所有数开方后向下调整至最近的整数 1 ...
- Spring Data JPA教程, 第三部分: Custom Queries with Query Methods(翻译)
在本人的Spring Data JPA教程的第二部分描述了如何用Spring Data JPA创建一个简单的CRUD应用,本博文将描述如何在Spring Data JPA中使用query方法创建自定义 ...
- 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]
题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...
- 实践 HTML5 的 CSS3 Media Queries
先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...
- CSS3 Media Queries 实现响应式设计
在 CSS2 中,你可以为不同的媒介设备(如屏幕.打印机)指定专用的样式表,而现在借助 CSS3 的 Media Queries 特性,可以更为有效的实现这个功能.你可以为媒介类型添加某些条件,检测设 ...
- 使用CSS3 Media Queries实现网页自适应
原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...
- SQL Queries from Transactional Plugin Pipeline
Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...
随机推荐
- sed 修改文件
总结 正确的修改进文件命令(替换文件内容):sed -i "s#machangwei#mcw#g" mcw.txt 正确的修改追加进文件命令(追加文件内容):sed -i &quo ...
- C语言中不用 + 和 - 求两个数之和
(二)解题 题目大意:不用+或者-实现两个整数的加法 解题思路:不用+或者-,就自然想到位运算,无非就是与或非来实现二进制的加法 首先,我们来看一位二进制的加法和异或运算 A B A&B A^ ...
- Hive(十)【窗口函数】
目录 一.定义 窗口函数: 标准聚合函数 分析排名函数 二.语法 (1)窗口函数 over([partition by 字段] [order by 字段] [ 窗口语句]) (2)窗口语句 三.需求练 ...
- Linux学习 - 系统定时任务
1 crond服务管理与访问控制 只有打开crond服务打开才能进行系统定时任务 service crond restart chkconfig crond on 2 定时任务编辑 crontab [ ...
- vue-cli 如何配置assetsPublicPath; vue.config.js如何更改assetsPublicPath配置;
问题: vue项目完成打包上线的时候遇到静态资源找不到的问题,网上很多解决办法都是基于vue-cli 2.x 来解决的,但从vue-cli 3.0以后,便舍弃了配置文件夹(便没有了config这个文件 ...
- BigDecimal 计算注意事项
BigDecimal 在进行除法运算(divide)时一定要注意:如果被除数为变量,一定要指定精度 和 舍入模式,否则会报:Non-terminating decimal expansion; no ...
- ssm动态查询向前台传json
1.数据协议层 public User selectById(Integer id);//通过id值查询用户 2.数据层 <select id="selectById" re ...
- bugku 杂项 流量分析(cnss)
bugku 杂项 流量分析(cnss) 此题较为简单 wireshark 追踪第一行tcp流信息 得到如下 GET /stat.htm?id=2724999&r=http%3A%2F%2Fsp ...
- MySQL安装详细教程(数据库免安装版)
MySQL安装详细教程(数据库免安装版)mysql-5.7.33-winx64.zip 一.软件下载 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产 ...
- testng 执行多个suite
我们知道testng的配置文件,一个.xml里面只能有一个suite,那么如果想要设置多个suite怎么弄呢?这个时候我们需要用到testng的标签<suite-files>. 下面说一下 ...