[La pensée et de la pratique de programmation travail Semaine5 B] TT chat magique

Description du sujet:

Merci à l'aide de tout le monde la semaine dernière, TT a finalement obtenu un chat mignon. Mais ce que TT ne s'y attendait pas est que c'est un chat magique.
Un jour, le chat magique a décidé d'enquêter sur la capacité de TT en lui donnant un problème. C'est certaines villes nn de la carte du monde, et [i] a [i] représente la valeur de l' actif détenu par le ii-ème ville.
Ensuite , le chat magique effectuera plusieurs opérations. Chaque tour est de choisir la ville dans l'intervalle [l, r] et d' accroître leur valeur par cc. Et enfin, il est nécessaire de donner la valeur de chaque ville après les opérations de qq.
Pourriez - vous aider à trouver la réponse TT?

Formats d'entrée:

La première ligne contient deux entiers n, q (1≤N, q≤2⋅10 5 ) - le nombre de villes et des opérations.
La deuxième ligne contient des éléments de la séquence aa: nombre entier nombres a1, a2, ..., an (-10 6 ≤ai≤10 6 )
Ensuite , les lignes de qq suivent, chaque ligne représente une opération. Le ii-ème ligne contient trois entiers l, r et c (1≤l≤r≤n, -10 5 ≤c≤10 5 ) pour le ii-ième opération.

formats de sortie:

Imprimer nn entiers a1, a2, ..., an une par ligne, et AI doit être égale à la valeur finale du ii-ème ville.

exemple:

Entrée 1:

4 2
-3 6 8 4
4 4 -2
3 3 1

Produit 1:

-3 6 9 2

Entrée 2:

2 1
5 -2
1 2 3

Produit 2:

9 2

Entrée 3:

1 2
0 
1 1 -8
1 1 -6

Produit 3:

-14

idées:

solution de violence est choisi dans chaque intervalle , le nombre d'opérations d'addition et de soustraction, de la complexité de temps est O (qn), le temps.
Ici approche matricielle différentielle, le nombre de la première matrice de différentiel b [1] et le réseau de sources d' un [1] les mêmes, et chaque nombre b [i] = a [i ] -a [i-1], si l'original n est égal à la matrice de différence, et le réseau avant le réseau d'éléments, cet intervalle de l, r plus ou moins dans son ensemble, peut être converti en le fonctionnement différentiel des deux réseaux. Tels que: l'intervalle [l, r] C taux global, soit b [l] + c, b [r + 1] -c, car après b [l] + c, alors si le réseau de différence inchangé, montrant la différence est la même, il est équivalent à l'ensemble du réseau d' origine après l'addition de l c, et b [r + 1] -c, et d' empathie pour l'ensemble du réseau source moins r + c après 1, qui est seulement changé [ l, r] intervalle. Un tel intervalle de variation changera en deux points, lorsque l'opération est terminée, puis déterminer la différence ancienne et la matrice peut être un tableau de n éléments, de sorte que le temps d' arrêt complexité O (q + n).

code:

#include <iostream>
using namespace std;
const int size=2*1e5+10;
long long a[size],b[size];
int main(int argc, char** argv) {
	int q,n;
	scanf("%d %d",&n,&q);
	a[0]=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
		b[i]=a[i]-a[i-1];
	}
	
	for(int i=0;i<q;i++)
	{
		int l,r,c;
		scanf("%d %d %d",&l,&r,&c);
		b[l]+=c;b[r+1]-=c;
	}
	b[0]=0;
	for(int i=1;i<=n;i++)
	{
		b[i]+=b[i-1];
		printf("%lld ",b[i]);
	}
	printf("\n");
	return 0;
}
Publié 24 articles originaux · éloge de won 8 · vues 528

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44034698/article/details/104983541
conseillé
Classement