Строковый запрос с двоичным индексированным деревом
Я хочу, чтобы диапазон запроса строки с использованием дерева Фенвика. Но что-то не так с моим кодом. Конкатенация выдает ошибку. Ошибка:[Ошибка] не соответствует '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);
т.е. круглые скобки, а не квадратные скобки.