func_code_string: #include <bits/stdc++.h>   using namespace std;   pair<pair<int, int>, int> a[100010];   vector<pair<long long, int> > pre[100010];   long long maxx = 0;   int maxi, maxj;   int c = 0;   long long s = 0;   long long val1, val2;   void eval(int i, int j, int k, bool f) {     val2 = pre[j][k].first;     if (val1 + val2 > maxx) {       maxx = val1 + val2;       maxi = pre[i][pre[i].size() - 1].second;       maxj = pre[j][k].second;       if (f) swap(maxi, maxj);     }   }   vector<int> out;   int main() {     int n, i;     scanf( %d , &n);     for (i = 0; i < n; ++i) {       scanf( %d , &a[i].first.first);       scanf( %d , &a[i].first.second);       a[i].first.second = -a[i].first.second;       a[i].second = i;     }     sort(a, a + n);     s = -a[0].first.second;     c++;     pre[c].push_back(make_pair(s, 0));     for (i = 1; i < n; ++i) {       if (a[i].first.first == a[i - 1].first.first) {         s -= a[i].first.second;         c++;       } else {         s = -a[i].first.second;         c = 1;       }       pre[c].push_back(make_pair(s, i));     }     for (i = 1; i < 100010; ++i) {       if (pre[i].size() == 0) break;       sort(pre[i].begin(), pre[i].end());     }     for (i = 1; i < 100010; ++i) {       if (pre[i].size() == 0) break;       val1 = pre[i][pre[i].size() - 1].first;       if (i > 1) {         if (pre[i - 1].size()) {           if (a[pre[i - 1][pre[i - 1].size() - 1].second].first.first !=               a[pre[i][pre[i].size() - 1].second].first.first)             eval(i, i - 1, pre[i - 1].size() - 1, 0);           else if (pre[i - 1].size() > 1)             eval(i, i - 1, pre[i - 1].size() - 2, 0);         }       }       if (pre[i].size() > 1) eval(i, i, pre[i].size() - 2, 0);       if (pre[i + 1].size()) {         if (a[pre[i + 1][pre[i + 1].size() - 1].second].first.first !=             a[pre[i][pre[i].size() - 1].second].first.first)           eval(i, i + 1, pre[i + 1].size() - 1, 1);         else if (pre[i + 1].size() > 1)           eval(i, i + 1, pre[i + 1].size() - 2, 1);       }     }     while (maxj) {       if (a[maxj - 1].first.first != a[maxj].first.first) break;       out.push_back(a[maxi].second + 1);       out.push_back(a[maxj].second + 1);       --maxi;       --maxj;     }     out.push_back(a[maxi].second + 1);     out.push_back(a[maxj].second + 1);     if (maxi) {       if (a[maxi - 1].first.first == a[maxi].first.first)         out.push_back(a[maxi - 1].second + 1);     }     printf( %lld n%d n , maxx, (int)out.size());     for (i = 0; i < out.size(); ++i) printf( %d  , out[i]);   }   