제출 #1174142

#제출 시각아이디문제언어결과실행 시간메모리
1174142javkhlantogsPoklon (COCI17_poklon)C++20
0 / 140
5094 ms35644 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
map<ll,ll> mp;
vector<ll> a;
ll k,cnt=0;
bool check(vector<ll> f,vector<ll> g){
	if(f[0]/k==g[0]/k) return f[1]<g[1];
	return f[0]<g[0];
}
void rem(ll x){
	if(mp[x]==3) cnt++;
	if(mp[x]==2) cnt--;
	mp[x]--;
}
void add(ll x){
	if(mp[x]==1) cnt++;
	if(mp[x]==2) cnt--;
	mp[x]++;
}
int main(){
	ll n,q,i,j,l=0,r=0;
	cin>>n>>q;
	a.resize(n+1);
	vector<ll> ans(q);
	k=sqrt(n);
	for(i=1 ; i<=n ; i++){
		cin>>a[i];
	}
	vector<vector<ll>> x(q,vector<ll>(3));
	for(i=0 ; i<q ; i++){
		cin>>x[i][0]>>x[i][1];
		x[i][2]=i;
	}
	sort(x.begin(),x.end(),check);
	for(i=x[0][0] ; i<=x[0][1] ; i++){
		add(a[i]);
	}
	ans[x[0][2]]=cnt;
	l=x[0][0];
	r=x[0][1];
	for(i=1 ; i<q ; i++){
		while(l<x[i][0]){
			rem(a[l]);	
			l++;
		}
		while(r<x[i][1]){
			r++;
			add(a[r]);
		}
		while(r>x[i][1]){
			rem(a[r]);
			r--;
		}
		ans[x[i][2]]=cnt;
	}
	for(i=0 ; i<q ; i++){
		cout<<ans[i]<<"\n";
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...