Submission #992022

#TimeUsernameProblemLanguageResultExecution timeMemory
992022LOLOLOPoklon (COCI17_poklon)C++17
140 / 140
229 ms43348 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define f first #define s second #define pb push_back #define ep emplace #define eb emplace_back #define lb lower_bound #define ub upper_bound #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define uniquev(v) sort(all(v)), (v).resize(unique(all(v)) - (v).begin()) #define mem(f,x) memset(f , x , sizeof(f)) #define sz(x) (ll)(x).size() #define __lcm(a, b) (1ll * ((a) / __gcd((a), (b))) * (b)) #define mxx *max_element #define mnn *min_element #define cntbit(x) __builtin_popcountll(x) #define len(x) (int)(x.length()) const int N = 5e5 + 100; int a[N]; vector <int> pos[N]; vector < pair <int, int>> ask[N]; int f[N], ans[N]; void upd(int i, int x) { for (; i; i -= i & (-i)) f[i] += x; } int get(int i) { int s = 0; for (; i < N; i += i & (-i)) s += f[i]; return s; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int timer = 1; int n, q; cin >> n >> q; map <int, int> mp; for (int i = 1; i <= n; i++) { cin >> a[i]; mp[a[i]]; } for (auto &x : mp) { x.s = timer; timer++; } for (int i = 1; i <= q; i++) { int l, r; cin >> l >> r; ask[r].pb({l, i}); } for (int i = 1; i <= n; i++) { a[i] = mp[a[i]]; } for (int i = 1; i <= n; i++) { int ss = sz(pos[a[i]]); if (ss) { upd(pos[a[i]].back(), 1); } if (ss > 1) { upd(pos[a[i]][ss - 2], -2); } if (ss > 2) { upd(pos[a[i]][ss - 3], 1); } pos[a[i]].pb(i); for (auto x : ask[i]) { ans[x.s] = get(x.f); } } for (int i = 1; i <= q; i++) cout << ans[i] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...