莫队 #5 T 了,求卡常
查看原帖
莫队 #5 T 了,求卡常
773915
endswitch楼主2024/8/22 15:26

rt。

code:

#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e5 + 5;
int n, Q, a[N], ans[N];

namespace Modui {
	int kc, L = 1, R, res, id[N];
	unordered_map<int, int> mp;
	struct Node {
		int l, r, id;
		Node(int ll = 0, int rr = 0, int iid = 0) {l = ll, r = rr, id = iid;}
	} q[N];
	
	inline void init() {
		kc = 317;
		
		for(int i = 1 ; i <= n ; ++ i)
			id[i] = (i - 1) / kc + 1;
	}
	
//	inline bool cmp(Node a, Node b) {
//		if(id[a.l] == id[b.l]) return a.r < b.r;
//		
//		return id[a.l] < id[b.l];
//	}
	
	inline bool cmp(Node a, Node b) {
		return id[a.l] ^ id[b.l] ? id[a.l] < id[b.l] : id[a.l] & 1 ? a.r < b.r : a.r > b.r;
	}
	
	inline void add(int x) {
		if(a[x] > n) return;
		
		if(mp[a[x]] == a[x]) -- res;
		
		++ mp[a[x]];
		
		if(mp[a[x]] == a[x]) ++ res;
	}
	
	inline void del(int x) {
		if(a[x] > n) return;
		
		if(mp[a[x]] == a[x]) -- res;
		
		-- mp[a[x]];
		
		if(mp[a[x]] == a[x]) ++ res;
	}
	
	inline void solve() {
		sort(q + 1, q + 1 + Q, cmp);
		
		for(int i = 1 ; i <= Q ; ++ i) {
			int l = q[i].l, r = q[i].r;
			
			while(L > l) add(-- L);
			while(R < r) add(++ R);
			while(L < l) del(L ++);
			while(R > r) del(R --);
			
			ans[q[i].id] = res;
		}
		
		for(int i = 1 ; i <= Q ; ++ i)
			cout << ans[i] << '\n';
	}
}

using namespace Modui;

signed main() {
	ios_base :: sync_with_stdio(NULL);
	cin.tie(nullptr);
	cout.tie(nullptr);
	
	cin >> n >> Q;
	for(int i = 1 ; i <= n ; ++ i)
		cin >> a[i];
	for(int i = 1 ; i <= Q ; ++ i) {
		int l, r;
		
		cin >> l >> r;
		
		q[i] = Node(l, r, i);
	}
	
	solve();
	
	return 0;
}
2024/8/22 15:26
加载中...