제출 #1311190

#제출 시각아이디문제언어결과실행 시간메모리
1311190nikaa123Election (BOI18_election)C++20
0 / 100
2 ms568 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; map <int, int> id; set<int> s; int a[N]; int t[N*4],t1[N*4]; int pref[N],suf[N]; void update(int node, int l, int r, int pos, int val) { if (pos < l || pos > r) return; if (l == r) { t[node] = val; return; } int mid = (l+r)/2; update(node*2,l,mid,pos,val); update(node*2+1,mid+1,r,pos,val); t[node] = max(t[node*2],t[node*2+1]); } int getans(int node, int l, int r, int L, int R) { if (r < L || l > R) return -inf; if (l >= L && r <= R) return t[node]; int mid = (l+r)/2; return max(getans(node*2,l,mid,L,R), getans(node*2+1,mid+1,r,L,R)); } void update1(int node, int l, int r, int pos, int val) { if (pos < l || pos > r) return; if (l == r) { t1[node] = val; return; } int mid = (l+r)/2; update1(node*2,l,mid,pos,val); update1(node*2+1,mid+1,r,pos,val); t1[node] = max(t1[node*2],t1[node*2+1]); } int getans1(int node, int l, int r, int L, int R) { if (r < L || l > R) return -inf; if (l >= L && r <= R) return t1[node]; int mid = (l+r)/2; return max(getans1(node*2,l,mid,L,R), getans1(node*2+1,mid+1,r,L,R)); } inline void test_case() { cin >> n; string c;cin >> c; for (int i = 0; i < n; i++) { if (c[i] == 'T') a[i+1] = 1; else a[i+1] = -1; } pref[0] = suf[n+1] = 0; for (int i = 1; i <= n; i++) { pref[i] = pref[i-1] + a[i]; update(1,1,n,i,pref[i]); } for (int i = n; i >= 1; i--) { suf[i] = suf[i+1] + a[i]; update1(1,1,n,i,suf[i]); } int q; cin >> q; while (q--) { int l; int r; cin >> l >> r; int val = getans(1,1,n,l,r); val -= pref[l-1]; int val2 = getans1(1,1,n,l,r)-suf[r+1]; cout << max(val,val2) << 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...