Я хочу, чтобы диапазон запроса строки с использованием дерева Фенвика. Но что-то не так с моим кодом.
Конкатенация дает ошибку
Ошибка: [Ошибка] не соответствует ‘operator + =’ (типы операндов ‘std :: vector>’ и ‘std :: string {aka std :: basic_string}’)
Учитывая строку s, я хочу сохранить строку в этом дереве 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);
}
}
это
vector<string> BIT[100005];
и это
BIT[x]+=c;
не ходи вместе. У вас есть массив векторов строк (в основном, двумерная матрица). И вы пытаетесь добавить строку c
к вектору в BIT[x]
, Ваши ошибки компиляции должны сообщать вам об этом.
Вы, вероятно, не хотели создавать массив векторных строк. Чтобы сделать вектор строк размером 100005, сделайте это:
vector<string> BIT(100005);
то есть круглые скобки, а не квадратные скобки.
Других решений пока нет …