Submission #1133289

#TimeUsernameProblemLanguageResultExecution timeMemory
1133289DangKhoizzzzPoklon (COCI17_poklon)C++20
140 / 140
670 ms45324 KiB
#include <bits/stdc++.h> #define fi first #define se second #define pii pair <int , int> using namespace std; const int INF = 1e9 + 7; const int maxn = 5e5 + 7; int n , q , st[maxn*4] , ans[maxn] , a[maxn]; void update(int id , int l , int r , int pos , int val) { if(l > pos || r < pos) return; if(l == r) { st[id] = val; return; } int mid = (l+r)/2; update(id*2 , l , mid , pos , val); update(id*2+1 , mid+1 , r , pos, val); st[id] = st[id*2] + st[id*2+1]; } int getsum(int id , int l , int r , int u , int v) { if(r < u || l > v) return 0; if(u <= l && r <= v) return st[id]; int mid = (l+r)/2; return (getsum(id*2 , l , mid , u , v) + getsum(id*2+1 , mid+1 , r , u , v)); } void compress() { vector <int> val; for(int i = 1; i <= n; i++) val.push_back(a[i]); sort(val.begin() , val.end()); for(int i = 1; i <= n; i++) { a[i] = upper_bound(val.begin() , val.end() , a[i]) - val.begin(); } } vector <int> pos[maxn]; vector <pii> query[maxn]; void solve() { cin >> n >> q; for(int i = 1; i <= n; i++) cin >> a[i]; compress(); for(int i = 1; i <= q; i++) { int l , r; cin >> l >> r; query[r].push_back({l , i}); } for(int i = 1; i <= n; i++) { pos[a[i]].push_back(i); int sz = pos[a[i]].size(); if(sz >= 2) update(1 , 1 , n , pos[a[i]][sz-2] , 1); if(sz >= 3) update(1 , 1 , n , pos[a[i]][sz-3] , -1); if(sz >= 4) update(1 , 1 , n , pos[a[i]][sz-4] , 0); for(pii tmp: query[i]) { int j = tmp.fi; int id = tmp.se; ans[id] = getsum(1 , 1 , n , j , i); } } for(int i = 1; i <= q; i++) {cout << ans[i] << '\n';} } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...