Source Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1000001; 

int a[N] ; 
int main() {
	int t ; 
	scanf("%d" , &t) ; 
	while (t--) {
		int n , k ; 
		scanf("%d%d" , &n , &k) ; 
		map<int , int>frq; 
		for(int i = 0 ; i<n ; ++i){
			scanf("%d" , &a[i]) ; 
			frq[a[i]]++;
		}
		vector<pair<int , int>>p ;  
		int x,  y; 
		scanf("%d%d" , &x , &y) ; 
		p.push_back(make_pair(x, y)) ; 
		for(int i = 1 ; i<k ; ++i) {
			scanf("%d%d" , &x , &y) ;
			if (x == p.back().first)
				p.back().second+=y;
			else 
				p.push_back(make_pair(x, y)) ; 
		}
		map<int, int>mp ; 
		int j = 0 ; 

		for (int i = 0 ; i<n ; ++i) {
			int x = p[j].first; 
			int y = p[j].second ; 

			mp[a[i]]++;
			frq[a[i]]--;
			
			if (j && a[i] == x && !mp[p[j-1].first] && frq[x] >= y)
				mp[x]--;
				
			if (mp[x] == y){
				j++;
				mp.clear();
			}
			
			if (j == p.size())
				break ; 
		}
		
		if (j == p.size() && !frq[p.back().first])
			puts("yes");
		else 
			puts("no") ; 
			
	}
	return 0;
}
Copy
Sorted Array Partitioning Chicou
GNU G++17
246 ms
9.2 MB
Accepted