bool dfs(int p) { if(p == len) return true; int x; x = s[p]- '0'; if(x <= n && !vis[x]) { f.PB(x); vis[x] = true; if(dfs(p + 1)) return true; f.pop_back(); vis[x] = false; } if(p + 1 < len) { x = (s[p] - '0') * 10 + s[p + 1] - '0'; if(x <= n && !vis[x]) { f.PB(x); vis[x] = true; if(dfs(p + 2)) return true; f.pop_back(); vis[x] = false; } } return false; }
int main(){ int n,d,m,s; cin >> n >> d; for(int i=0;i<n;i++){ scanf("%d %d",&m,&s); a[i]=MP(m,s); } int l=0,r=0; long long f = 0, mx = 0; sort(a,a+n); q.PB(a[0]); int j=0; while(a[0].F+d > a[r].F && r<n){ q.PB(a[r]); f += a[r].S; r++; } while(r<n){ if(mx < f) mx = f; q.pop_front(); f -= a[l].S; l++; while(a[l].F+d>a[r].F && r<n){ q.PB(a[r]); f += a[r].S; r++; } } if(mx < f) mx = f; cout << mx << endl; return 0; }
void splitInput( ) { p = 0; row = col = 1; ignoreGarbage( ); while( program[ p ] != '\0' ) { Token nxtToken = nextToken( ); if( !aborted ) tokens.PB( nxtToken ); else break; ignoreGarbage( ); } }
int main(){ freopen("huffman.in", "r", stdin); freopen("huffman.out", "w", stdout); while(~scanf("%d", &n)){ p.clear(); q.clear(); rep(i, n){ LL x; scanf("%I64d", &x); p.PB(x); } LL ret = 0; while(p.size() + q.size() > 1){ LL x, y; get_mi(x); get_mi(y); q.PB(x + y); ret += x + y; } printf("%I64d\n", ret); }