Codeforces 57B Martian Architecture 暴力||线段树

题目链接:点击打开链接

题意:n长的序列(初始全为0) m个操作 k个查询

下面m个操作[l,r] h 代表 a[l] +=h; a[l+1] += h+i; a[l+i] += h+i;  l<=i<=r

然后问k个位置的和

因为k<=100 所以直接暴力也可以

-----------------------

如果k<=100000 也是可以做的

只需要给区间记录一个标记lazy,表示从左端点开始 l, l+1, l+i ··· l+r

而向下更新时, 左区间则直接更新, 右区间先给整个区间加上一个值tree[L(id)].r , 然后再传个标记下去,这样就能解决了。。

先来份暴力的。。

#include<iostream>
#include<cstdio>
#include<vector>
#include<string.h>
using namespace std;
#define ll long long
#define N 100005
#define mod 1000000007
ll l[N], r[N], hehe[N];
ll n, m, k;
int main(){
	ll i, j;
	while(cin>>n>>m>>k){
		for(i = 1; i <= m; i++)scanf("%I64d %I64d %I64d", &l[i], &r[i], &hehe[i]);
		ll ans = 0;
		while(k--)
		{

			scanf("%I64d",&j);
			for(i = 1; i <= m; i++)
			{
				if(j < l[i] || j > r[i])continue;
				ans += hehe[i];
				ans += j - l[i];
			}

		}
		cout<<ans<<endl;
	}
	return 0;
}

Codeforces 57B Martian Architecture 暴力||线段树

时间: 2024-10-04 09:56:37

Codeforces 57B Martian Architecture 暴力||线段树的相关文章

Codeforces 444C DZY Loves Colors(线段树)

题目大意:Codeforces 444C DZY Loves Colors 题目大意:两种操作,1是修改区间上l到r上面德值为x,2是询问l到r区间总的修改值. 解题思路:线段树模板题. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; const int maxn = 5*1e5; typedef long lo

hdu 5306 Gorgeous Sequence(暴力线段树)(好题)

题意:区间最大长度为1000000, 三种操作: 区间求和: 区间求最大值: 将节点值更新为当前值与给定值中的最小值(有趣的更新): 思路: 暴力线段树.关键在于处理标记,需要维护最大标记,标记覆盖范围,所在区间: 覆盖区域标记起到很关键的作用: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ long long sum; int tag,m

HDOJ 1394 Minimum Inversion Number 求循环串的最小逆序数(暴力&amp;&amp;线段树)

Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14879    Accepted Submission(s): 9082 Problem Description The inversion number of a given number sequence a1, a2, ..., a

codeforces 487B B. Strip(rmq+线段树+二分)

题目链接: codeforces 487B 题目大意: 给出一个序列,要把序列划分成段,每一段最少有L个元素,段中的最大元素和最小元素之差不大于s,问划分的段的最少的数量是多少. 题目分析: 首先用rmq维护区间最大值和区间最小值. 然后按顺序扫描数组,线段树维护的数组,每个记录当前点作为最后一个点的前i个点划分的最小的段数,那么每次更新就是二分找到可以转移到我的最远距离,然后再选取与我距离大于l的那部分,取最小值即可. 最终结果就是线段树维护的数组的最后一个位置的元素的值. AC代码: #in

codeforces 482B. Interesting Array【线段树区间更新】

题目:codeforces 482B. Interesting Array 题意:给你一个值n和m中操作,每种操作就是三个数 l ,r,val.就是区间l---r上的与的值为val,最后问你原来的数组是多少?如果不存在输出no 分析:分析发现要满足所有的区间,而一个点上假如有多个区间的话,这个点的值就是所有区间或的值,因为只有这样才能满足所有区间的,把所有位上的1都保存下来了,那么可以发现用线段树来维护,但是那么怎么判断满不满足条件呢?可以也用线段树,更新了之后在整个维护一遍看看满不满足题意,如

Codeforces GYM 100114 D. Selection 线段树维护DP

D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description When selecting files in an application dialog, Vasya noted that he can get the same selection in different ways. A simple mouse click selects a sing

Codeforces 834D The Bakery - 动态规划 - 线段树

Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredients and a wonder-oven which can bake several types of cakes, and opened the bakery. Soon the expenses started to overcome the income, so Slastyona decid

HDU 1394 Minimum Inversion Number(暴力/线段树)

题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1394 暴力(Time:453ms) #include<stdio.h> #define MAXN 5005 int a[MAXN]; int main() { int n,i,j; while(~scanf("%d",&n)) { int ans=0x3f3f3f3f; for(i=0; i<n; i++) scanf("%d",&a

Codeforces 486E LIS of Sequence(线段树+LIS)

题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组,现在要确定每个位置上的数属于哪一种类型. 解题思路:先求出每个位置选的情况下的最长LIS,因为开始的想法,所以求LIS直接用线段树写了,没有改,可以用 log(n)的算法直接求也是可以的.然后在从后向前做一次类似LIS,每次判断A[i]是否小于f[dp[i]+1],这样就可以确定该位 置是否属于LIS序列.然后为第三类的则说明dp[i] = k的只有一个满足. #include <cstdio>