func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = 1e9 + 7;   const int N = 5e5 + 10;   int a[N];   int dp[2][N];   int minv[N];   int sum[N];   int n, k, p;   class BIT {     int a[110];       public:     void init() { memset((a), (0x1f), sizeof(a)); }     inline int lowbit(int x) { return x & -x; }     void add(int x, int v) {       x = p - x;       while (x < 110) {         a[x] = min(a[x], v);         x += lowbit(x);       }     }     int sum(int x) {       int ret = INF;       while (x) {         ret = min(ret, a[x]);         x -= lowbit(x);       }       return ret;     }   } b;   template <class T>   inline void readint(T &ret) {     char c;     ret = 0;     while ((c = getchar()) <  0  || c >  9 )       ;     while (c >=  0  && c <=  9 ) {       ret = ret * 10 + (c -  0 ), c = getchar();     }   }   int main() {     readint(n);     readint(k);     readint(p);     int o = 0;     for (int i = 1; i <= n; i++) {       readint(a[i]);       a[i] %= p;       sum[i] = sum[i - 1] + a[i];       dp[o][i] = (a[i] + dp[o][i - 1]) % p;     }     for (int i = 2; i <= k; i++) {       o ^= 1;       b.init();       memset((dp[o]), (0x1f), sizeof(dp[o]));       b.add(0, sum[i - 1]);       int tot = 0;       for (int j = i; j <= n; j++) {         tot = (tot + a[j]);         if (tot >= p) tot -= p;         dp[o][j] = min(b.sum(tot) - p, b.sum(p)) + tot;         int t = (p - tot);         if (t == p) t = 0;         b.add(t, dp[o ^ 1][j] + t);       }     }     printf( %d n , dp[o][n]);     return 0;   }   