Submission #1145675

#TimeUsernameProblemLanguageResultExecution timeMemory
1145675Ekber_EkberExam (eJOI20_exam)C++20
12 / 100
48 ms8008 KiB
#include <bits/stdc++.h> #define GOOD_LUCK ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define int long long #define itn int #define endl "\n" #define ff first #define ss second #define pb push_back #define ppb pop_back #define ins insert #define lb lower_bound #define ub upper_bound #define bs binary_search #define count1 __builtin_popcount #define all(v) v.begin(), v.end() #define pairi pair<int, int> #define fori(n) for(int i=0; i < n; i++) using namespace std; struct point{ int ma, cnt; }; int ctoi(char x) { return (int)x - 'a' + 1; } int sumab(int a, int b) { return (a + b) * (b - a + 1) / 2; } int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a%b); } int lcm(int a, int b) { return a / gcd(a, b) * b; } void print(auto &v) { for (const int &i : v) cout << i << ' '; } constexpr int MAX = 1e+5 + 3, INF = 1e+9, MOD = 1e+9 + 7; int temp, temp1, temp2, temp3; vector <point> t(4*MAX); vector <int> a, b; void build(int v, int tl, int tr) { if (tl == tr) { t[v].ma = a[tl]; t[v].cnt = (a[tl] == b[tl]); return; } int tm = (tl + tr) / 2; build(v*2, tl, tm); build(v*2+1, tm+1, tr); t[v].ma = max(t[v*2].ma, t[v*2+1].ma); if (t[v*2].ma == t[v*2+1].ma) { t[v].cnt = t[v*2].cnt + t[v*2+1].cnt; } else if (t[v*2].ma < t[v*2+1].ma) { t[v].cnt = t[v*2+1].cnt; } else { t[v].cnt = t[v*2].cnt; } } point find(int v, int tl, int tr, int l, int r) { if (l > r) { point null; null.ma = null.cnt = 0; return null; } if (tl == l && tr == r) return t[v]; int tm = (tl + tr) / 2; point res1 = find(v*2, tl, tm, l, min(r, tm)); point res2 = find(v*2+1, tm+1, tr, max(l, tm+1), r); point res; res.ma = max(res1.ma, res2.ma); if (res1.ma == res2.ma) { res.cnt = res1.cnt + res2.cnt; } else if (res1.ma < res2.ma) { res.cnt = res2.cnt; } else { res.cnt = res1.cnt; } return res; } void _() { int n; cin >> n; vector <int> a(n), b(n); for (int &i : a) cin >> i; for (int &i : b) cin >> i; int ma = *max_element(all(a)); if (ma == b[0]) { cout << n; return; } int l = 0, res=0; for (int i=0; i < n; i++) { if (a[i] == b[i]) { while (i < n && a[i] <= b[i]) { i++; } res += i - l; i--; } else if (a[i] > b[i]) { l = i + 1; } } cout << res; } signed main() { // GOOD_LUCK srand(time(0)); int tests=1; // cin >> tests; while (tests--) { _(); // cout << endl; } return 0; } // Problem X // by Ekber_Ekber
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...