Строковый запрос с двоичным индексированным деревом

Я хочу, чтобы диапазон запроса строки с использованием дерева Фенвика. Но что-то не так с моим кодом. Конкатенация выдает ошибку. Ошибка:[Ошибка] не соответствует 'operator+=' (типы операндов: 'std::vector >' и 'std::string {aka std::basic_string}'). хранить строку в этом дереве Fenwick. Например, s=abcdef, на BIT он должен (сверху вниз) иметь древовидную структуру ab-c abcd-e abcd-ef

vector<string> BIT[100005];
    int n;
    void BI(int x,string c)
    {
        for(;x<=n;x+=x&-x)  
        {
            BIT[x]+=c;
        }

    }

    int main()
    {
        cin>>n;
        string s;
        for(int i=1;i<=n;i++)
        {   cin>>s;
            BI(i,s);
        }

    }

1 ответ

Решение

Это

vector<string> BIT[100005];

и это

BIT[x]+=c;

не ходи вместе. У вас есть массив векторов строк (в основном, двумерная матрица). И вы пытаетесь добавить строку c к вектору в BIT[x], Ваши ошибки компиляции должны сообщать вам об этом.

Вы, вероятно, не хотели создавать массив векторных строк. Чтобы сделать вектор строк размером 100005, сделайте это:

vector<string> BIT(100005);

т.е. круглые скобки, а не квадратные скобки.

Другие вопросы по тегам