Submission #73705499


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

class SegmentTree {
private:
    vector<ll> tree;
    int size;
    
public:
    SegmentTree(int n) {
        size = n;
        tree.resize(4 * n, 0);
    }
    
    void update(int node, int left, int right, int pos, ll val) {
        if (left == right) {
            tree[node] = val;
            return;
        }
        int mid = (left + right) / 2;
        if (pos <= mid) {
            update(node * 2, left, mid, pos, val);
        } else {
            update(node * 2 + 1, mid + 1, right, pos, val);
        }
        tree[node] = tree[node * 2] + tree[node * 2 + 1];
    }
    
    ll query(int node, int left, int right, int ql, int qr) {
        if (ql > right || qr < left) return 0;
        if (ql <= left && right <= qr) return tree[node];
        int mid = (left + right) / 2;
        return query(node * 2, left, mid, ql, qr) + query(node * 2 + 1, mid + 1, right, ql, qr);
    }
};

int main() {
    string s;
    cin >> s;
    
    map<char, int> freqMap;
    set<char> uniqueChars;
    vector<int> positions[26];
    
    for (int i = 0; i < s.length(); i++) {
        freqMap[s[i]]++;
        uniqueChars.insert(s[i]);
        positions[s[i] - 'a'].push_back(i);
    }
    
    vector<ll> nums(s.length());
    for (int i = 0; i < s.length(); i++) {
        nums[i] = s[i] - 'a' + 1;
    }
    
    SegmentTree segTree(s.length());
    for (int i = 0; i < s.length(); i++) {
        segTree.update(1, 0, s.length() - 1, i, nums[i]);
    }
    
    ll totalSum = segTree.query(1, 0, s.length() - 1, 0, s.length() - 1);
    
    vector<int> cnt(26, 0);
    for (char c : s) {
        cnt[c - 'a']++;
    }
    
    int mx = 0;
    for (int i = 0; i < 26; i++) {
        mx = max(mx, cnt[i]);
        if (cnt[i] > 0) {
            segTree.update(1, 0, s.length() - 1, positions[i][0], cnt[i]);
        }
    }
    
    map<int, int> countByFreq;
    for (int i = 0; i < 26; i++) {
        if (cnt[i] > 0) {
            countByFreq[cnt[i]]++;
        }
    }
    
    set<char> charsToRemove;
    for (int i = 0; i < 26; i++) {
        if (cnt[i] == mx) {
            charsToRemove.insert('a' + i);
        }
    }
    
    vector<char> result;
    for (char c : s) {
        if (cnt[c - 'a'] != mx) {
            result.push_back(c);
        }
    }
    
    for (int i = 0; i < result.size(); i++) {
        cout << result[i];
    }
    
    return 0;
}

Submission Info

Submission Time
Task B - mpp
User captainprice27
Language C++23 (GCC 15.2.0)
Score 200
Code Size 2542 Byte
Status AC
Exec Time 1 ms
Memory 3684 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:46:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |     for (int i = 0; i < s.length(); i++) {
      |                     ~~^~~~~~~~~~~~
./Main.cpp:53:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |     for (int i = 0; i < s.length(); i++) {
      |                     ~~^~~~~~~~~~~~
./Main.cpp:58:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     for (int i = 0; i < s.length(); i++) {
      |                     ~~^~~~~~~~~~~~
./Main.cpp:98:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |     for (int i = 0; i < result.size(); i++) {
      |                     ~~^~~~~~~~~~~~~~~
./Main.cpp:62:8: warning: unused variable 'totalSum' [-Wunused-variable]
   62 |     ll totalSum = segTree.query(1, 0, s.length() - 1, 0, s.length() - 1);
      |        ^~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 200 / 200
Status
AC × 3
AC × 20
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3656 KiB
00_sample_01.txt AC 1 ms 3440 KiB
00_sample_02.txt AC 1 ms 3608 KiB
01_test_00.txt AC 1 ms 3460 KiB
01_test_01.txt AC 1 ms 3620 KiB
01_test_02.txt AC 1 ms 3456 KiB
01_test_03.txt AC 1 ms 3620 KiB
01_test_04.txt AC 1 ms 3656 KiB
01_test_05.txt AC 1 ms 3460 KiB
01_test_06.txt AC 1 ms 3620 KiB
01_test_07.txt AC 1 ms 3600 KiB
01_test_08.txt AC 1 ms 3456 KiB
01_test_09.txt AC 1 ms 3460 KiB
01_test_10.txt AC 1 ms 3672 KiB
01_test_11.txt AC 1 ms 3456 KiB
01_test_12.txt AC 1 ms 3684 KiB
01_test_13.txt AC 1 ms 3596 KiB
01_test_14.txt AC 1 ms 3660 KiB
01_test_15.txt AC 1 ms 3656 KiB
01_test_16.txt AC 1 ms 3684 KiB