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;
}