как избежать TLE если Q >=1000001

Рейтинг: 0Ответов: 0Опубликовано: 21.03.2023

не знаю как избежать TLE, вот задача: Напишите код на С++: Вам будет задано Q запросов двух типов: "+x" - означает добавить число x в конец массива. "?L R" - означает найти сумму чисел в интервале [L, R] массива, т.е. A[L] + A[L+1] + ... + A[R].

Входные данные: Первая строка содержит натуральное число Q, обозначающее количество запросов (Q < 1000001). В следующих Q строках каждый запрос представляет собой либо «+ x», либо «? L R», где x, L и R — натуральные числа (|x| <1000, 1 <= L <= R <= 10^6) .

Обратите внимание, что массив изначально пуст, и предполагается, что массив проиндексирован с 1.

Проблема в том если Q >=1000001 то код очень медленно считает, может есть какие-то варианты как можно ускорить код? Вот код:

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
 
int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int q, x, l, r, sum,k=0;
  char b;
  cin>>q;
  vector<int> a(q, 0);
  for (int i=1; i<=q; i++){
    cin>>b;
    if (b=='+') {
    cin>>x;
      k++;
    a[k]=a[k-1]+x;
    } 
    else if(b=='?'){
      cin>>l>>r;
      sum=a[r]-a[l-1];
      cout<<sum<<endl;
    }
  }
 
}

Ответы

Ответов пока нет.