제출 #818881

#제출 시각아이디문제언어결과실행 시간메모리
818881vjudge1Poklon (COCI17_poklon)C++17
0 / 140
746 ms107164 KiB
#include <bits/stdc++.h> #define pb push_back #define ll long long #define fi first #define se second using namespace std; const int N = 1e6+7; const int oo = 1e9+7; int n, q; ll s[N], a[N], p[N], res[N]; vector<pair<int, int>> v[N]; map<ll, int> mp; void update(int id, int l, int r, int x, int val) { if (l > x || r < x) return; if (l == r) { s[id] += val; return; } int mid = (l + r) /2; update(id * 2, l, mid, x, val); update(id * 2 + 1, mid + 1, r, x, val); s[id] = s[id * 2] + s[id * 2 + 1]; } ll get(int id, int l, int r, int x, int y) { if (l > y || r < x) return 0; if (x <= l && r <= y) return s[id]; int mid = (l + r) / 2; return get(id * 2, l, mid, x, y) + get(id * 2 + 1, mid + 1, r, x, y); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); // freopen(".INP", "r", stdin); // freopen(".OUT", "w", stdout); cin>> n>> q; for (int i = 1; i <= n; i++) { cin>> a[i]; p[i] = mp[a[i]]; mp[a[i]] = i; } for (int i = 1; i <= q; i++) { int l, r; cin>> l>> r; v[r].pb({l, i}); } for (int i = 1; i <= n; i++) { int x = p[i]; int y = p[x]; if (x > 0) update(1, 1, n, x, 1); if (y > 0) update(1, 1, n, y, -2); for (auto l:v[i]) res[l.se] = get(1, 1, n, l.fi, i); if (y > 0) update(1, 1, n, y, 1); } for (int i = 1; i <= q; i++) cout<< res[i]<< '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...