列表

详情


NC200041. Imperishable Night

描述

在地图的帮助下,Vanis在那个夜晚 (the splendid diamonds night) 找到了许多的钻石,但是夜晚却迟迟未结束,似乎是因为某种异变,不过这都与Vanis无关,Vanis十分无聊,于是他找到n个盒子放在桌上,排成一排,从左到右依次从1编号到n,之后,Vanis会做多次操作,对于第i次操作,他会在从编号为l_ir_i的所有盒子(包括l_ir_i)中放入k_i颗钻石。

最后他想知道从左到右每个盒子中各有多少颗钻石。

输入描述

第一行包含两个正整数n和q,之间使用一个空格符分隔,分别为盒子的数目以及操作的次数。
第二行开始连续q行,每行包含三个整数,相邻整数之间使用一个空格符分隔,这样输入的第i行的三个整数按照输入顺序记作

数据规范:
* .
* .
* .
* .
* .
* 保证完成所有操作后全部盒子中的钻石数目之和不超过.

输出描述

输出一行,包含n个整数,相邻整数之间使用一个空格符分隔,输出的第i个整数表示编号为i的盒子中的钻石个数。

示例1

输入:

5 3
1 1 2
1 2 1
1 3 1

输出:

4 2 1 0 0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 569ms, 内存消耗: 9240K, 提交时间: 2019-12-08 09:59:40

#include <stdio.h>
int a[1000000];
int main(){
	int n,q,k,l,r;
	scanf("%d%d", &n, &q);
	while(q--){
		scanf("%d%d%d", &l,&r,&k);
		a[l]+=k;
		a[r+1]-=k;
	}
	int sum=0;
	for(int i=1;i<=n;i++){
		sum+=a[i];
		if(i==1)
			printf("%d", sum);
		else
			printf(" %d", sum);
	}
	return 0;
}

C(clang 3.9) 解法, 执行用时: 564ms, 内存消耗: 10264K, 提交时间: 2019-12-12 21:07:03

#include<stdio.h>
int s[1000010];
int main()
{
	int m,n,k,a,b,c,i;
	scanf("%d%d",&m,&n);
	while(n--)
	{
		scanf("%d%d%d",&a,&b,&c);
		s[a]+=c;
		s[b+1]-=c;
	}
	printf("%d",s[1]);
	for(i=2;i<=m;i++)
	{
		s[i]+=s[i-1];
		printf(" %d",s[i]);
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 388ms, 内存消耗: 9196K, 提交时间: 2019-12-07 12:46:10

#include<stdio.h>
int a[1000050];
int main(){
	int n,k,l,r,q;
	int sum=0;
	scanf("%d%d",&n,&q);
	for(int i=1;i<=q;i++){
		scanf("%d%d%d",&l,&r,&k);
		a[l]+=k;
		a[r+1]-=k;
	}
	for(int i=1;i<=n;i++){
		sum+=a[i];
		printf("%d ",sum);
	}
	return 0;
}

上一题