func_code_string: #include <bits/stdc++.h>   using namespace std;   long long cas = 1;   long long dxx[] = {-1, -1, -1, 0, 0, 1, 1, 1};   long long dyy[] = {-1, 0, 1, -1, 1, -1, 0, 1};   long long dx[] = {-1, 0, 0, 1};   long long dy[] = {0, -1, 1, 0};   struct info {     long long mi, pro, cnt;   } tre[100005 * 3];   long long ai[100005], ans = 0;   void update(long long n, long long be, long long en, long long i, long long j,               long long v) {     if (i > en || j < be) return;     if (be >= i && en <= j) {       tre[n].cnt++;       tre[n].pro += v + (be - i);       return;     }     long long m, l, r;     m = (be + en) / 2;     l = n * 2;     r = l + 1;     if (tre[n].pro >= 1) {       tre[l].pro += tre[n].pro;       tre[l].cnt += tre[n].cnt;       tre[r].pro += tre[n].pro + tre[n].cnt * ((m + 1 - be));       tre[r].cnt += tre[n].cnt;       tre[n].pro = 0;       tre[n].cnt = 0;     }     update(l, be, m, i, j, v);     update(r, m + 1, en, i, j, v);   }   long long query(long long n, long long be, long long en, long long i) {     if (ans != -1) return ans;     if (be == i && en == i) {       tre[n].cnt++;       ans = tre[n].pro;       return tre[n].pro;     }     long long m, l, r;     m = (be + en) / 2;     l = n * 2;     r = l + 1;     long long a, b;     if (tre[n].pro >= 1) {       tre[l].pro += tre[n].pro;       tre[l].cnt += tre[n].cnt;       tre[r].pro += tre[n].pro + tre[n].cnt * ((m - be + 1));       tre[r].cnt += tre[n].cnt;       tre[n].pro = 0;       tre[n].cnt = 0;     }     if (be <= i && m >= i) return query(l, be, m, i);     return query(r, m + 1, en, i);   }   int main() {     memset(tre, 0, sizeof(tre));     long long n, m, q, i, k, j, v;     scanf( %lld%lld%lld , &n, &m, &q);     for (k = 0; k < m; k++) {       scanf( %lld%lld%lld , &i, &j, &v);       update(1, 1, n, i, j, v);     }     long long a1 = 0;     for (i = 1; i <= q; i++) {       scanf( %d , &k);       ans = -1;       ans = query(1, 1, n, k);       a1 += ans;     }     printf( %lld n , a1);   }   