1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<queue>
7 using namespace std;
8 #define Maxn 1010
9 #define Maxm 10010
10 #define INF 0xfffffff
11
12 int mymin(int x,int y) {return x<y?x:y;}
13
14 int n,m;
15
16 struct node
17 {
18 int x,y,f,c,o,next;
19 }t[4*Maxm];
20 int first[Maxn],len;
21
22 void ins(int x,int y,int f,int c)
23 {
24 t[++len].x=x;t[len].y=y;t[len].f=f;t[len].c=c;t[len].o=len+1;
25 t[len].next=first[x];first[x]=len;
26 t[++len].x=y;t[len].y=x;t[len].f=0;t[len].c=-c;t[len].o=len-1;
27 t[len].next=first[y];first[y]=len;
28 }
29
30 int nd[Maxn];
31 int dis[Maxn],flow[Maxn],pre[Maxn],st,ed;
32 bool inq[Maxn];
33 queue<int > q;
34
35 void bfs()
36 {
37 while(!q.empty()) q.pop();
38 // memset(dis,-1,sizeof(dis));
39 for(int i=1;i<=ed;i++) dis[i]=INF;
40 memset(inq,0,sizeof(inq));
41 dis[st]=0;inq[st]=1;q.push(st);
42 flow[st]=INF;
43 while(!q.empty())
44 {
45 int x=q.front();
46 for(int i=first[x];i;i=t[i].next) if(t[i].f>0)
47 {
48 int y=t[i].y;
49 if(dis[y]>dis[x]+t[i].c)
50 {
51 dis[y]=dis[x]+t[i].c;
52 pre[y]=i;
53 flow[y]=mymin(flow[x],t[i].f);
54 if(!inq[y])
55 {
56 q.push(y);
57 inq[y]=1;
58 }
59 }
60 }
61 q.pop();inq[x]=0;
62 }
63 }
64
65 void max_flow()
66 {
67 int sum=0;
68 while(1)
69 {
70 bfs();
71 if(dis[ed]==INF) break;
72 sum+=dis[ed]*flow[ed];
73 int x=ed;
74 while(x!=st)
75 {
76 t[pre[x]].f-=flow[ed];
77 t[t[pre[x]].o].f+=flow[ed];
78 x=t[pre[x]].x;
79 }
80 }
81 printf("%d\n",sum);
82 }
83
84 void output()
85 {
86 for(int i=1;i<=len;i+=2)
87 {
88 printf("%d -> %d = %d , %d \n",t[i].x,t[i].y,t[i].f,t[i].c);
89 }
90 }
91
92 int main()
93 {
94 scanf("%d%d",&n,&m);
95 len=0;
96 for(int i=1;i<=n;i++) scanf("%d",&nd[i]);
97 memset(first,0,sizeof(first));
98 for(int i=1;i<=m;i++)
99 {
100 int l,r,c;
101 scanf("%d%d%d",&l,&r,&c);
102 ins(l,r+1,INF,c);
103 }
104 for(int i=1;i<=n;i++) ins(i+1,i,INF,0);
105 nd[0]=0;
106 st=n+2;ed=st+1;
107 for(int i=1;i<=n;i++) if(nd[i]-nd[i-1]>0) ins(st,i,nd[i]-nd[i-1],0);
108 else if(nd[i]-nd[i-1]<0) ins(i,ed,nd[i-1]-nd[i],0);
109 ins(n+1,ed,nd[n],0);
110 // output();
111 max_flow();
112 return 0;
113 }