Submission #1311296

#TimeUsernameProblemLanguageResultExecution timeMemory
1311296nikaa123Election (BOI18_election)C++20
82 / 100
54 ms30884 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define eb emplace_back #define mp make_pair #define pb push_back #define pp pop_back #define endl '\n' #define ff first #define ss second #define stop exit(0) #define sz(x) (int)x.size() #define pause system("pause") #define all(x) (x).begin(), (x).end() #define deb(x) cout << #x << "-" << x << endl mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef string str; typedef long long ll; typedef vector<int> vii; typedef pair<int, int> pii; const long long INF = LLONG_MAX; const int inf = INT_MAX; const int mod = 998244353; const int MOD = 1000000007; const int dx[] = {-1,0,1,0}; const int dy[] = {0,1,0,-1}; const double PI = 2 * acos(0.0); const int N = 2e5+5; int n; string c; map <int, int> id; set<int> s; int a[N]; int pref[N],suf[N],preft[N]; struct NODE{ int sum = 0; int pref = 0; int suf = 0; int ans = 0; } t[4*N]; NODE merge(NODE a, NODE b) { NODE res; res.sum = a.sum + b.sum; res.pref =max(a.pref, a.sum + b.pref); res.suf = max(a.suf + b.sum,b.suf); res.ans = max(max(a.ans+b.sum,b.ans+a.sum),a.pref+b.suf); return res; } void build(int node, int l, int r) { if (l == r) { if (c[l-1] == 'T') { t[node] = {1,1,1,1}; } else { t[node] = {-1,0,0,0}; } return; } int mid = (l+r)/2; build(node*2,l,mid); build(node*2+1,mid+1,r); t[node] = merge(t[node*2],t[node*2+1]); } NODE getans(int node, int l, int r, int L, int R) { if (r < L || l > R) return {0,0,0,0}; if (l >= L && r <= R) return t[node]; int mid = (l+r)/2; return merge(getans(node*2,l,mid,L,R), getans(node*2+1,mid+1,r,L,R)); } inline void test_case() { cin >> n; cin >> c; build(1,1,n); int q; cin >> q; while (q--) { int l; int r; cin >> l >> r; cout << getans(1,1,n,l,r).ans << endl; } } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T = 1; // cin >> T; while (T--) test_case(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...