Submission #1019741

#TimeUsernameProblemLanguageResultExecution timeMemory
1019741ZeroCoolPoklon (COCI17_poklon)C++14
140 / 140
837 ms29776 KiB
#include <bits/stdc++.h>
using namespace std;
  
#define int long long
  
#define ll long long
#define ar array
#define ld long double
  
const int N = 5e5 + 20;
const int MOD = 1e9 + 7;
const int K = 700;
const int INF = 1e17;
const int LOG = 34;

int ans = 0;
int cnt[N];
int A[N];
void add(int x){
	x = A[x];
	ans -= cnt[x] == 2;
	cnt[x]++;
	ans += cnt[x] == 2;
}

void rem(int x){
	x = A[x];
	ans -= cnt[x] == 2;
	cnt[x]--;
	ans += cnt[x] == 2;
}

bool cmp(ar<int, 3> a, ar<int,3 > b){
	return ar<int,2>{a[0] / K, a[1]} < ar<int, 2>{b[0] / K, b[1]};
}

signed main(){ios::sync_with_stdio(false);cin.tie(0);   
	int n, q;
	cin>>n>>q;
	map<int,int> mp;
	int id = 0;
	for(int i = 0;i < n;i++){
		cin>>A[i];
		if(!mp.count(A[i]))mp[A[i]] = id++;
		A[i] = mp[A[i]];
		//cout<<A[i]<<" ";
	}
	
	//cout<<endl;
	ar<int, 3> que[q];
	for(int i = 0;i < q;i++){
		cin>>que[i][0]>>que[i][1];
		--que[i][0], --que[i][1];
		que[i][2] = i;
	}
	
	int ml = 0;
	int mr = -1;
	sort(que, que + q, cmp);
	int res[q];
	for(int i = 0;i < q;i++){
		int l = que[i][0];
		int r = que[i][1];
		int ind = que[i][2];
		//cout<<i<<endl;
		while(ml > l)add(--ml);
		while(mr < r)add(++mr);
		while(ml < l)rem(ml++);
		while(mr > r)rem(mr--);
		
		res[ind] = ans;
	}
	for(int i = 0;i < q;i++)cout<<res[i]<<" ";
}

// Te molam da raboti!
#Verdict Execution timeMemoryGrader output
Fetching results...