제출 #1324640

#제출 시각아이디문제언어결과실행 시간메모리
1324640aaaaaaaaGrudanje (COCI19_grudanje)C++20
70 / 70
114 ms6708 KiB
#include <bits/stdc++.h>
using namespace std;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(nullptr); cout.tie(nullptr);
	string str;
	int q, l, r, n, idx = 1, best = 0;
	vector<pair<int, int>> vec;
	cin >> str >> q;
	n = (int) str.size();
	vector<int> point(n + 1, 0);
	set<int> st[26];
	for(int j = 0; j < n; ++j){
		st[str[j] - 'a'].insert(j);
	}
	while(q--){
		cin >> l >> r;
		vec.push_back({l, r});
	}
	for(int i = 1; i <= n; ++i){
		cin >> point[i];
	}
	auto bad = [&](int left, int right) -> bool {
		for(int j = 0; j < 26; ++j){
			if((int) st[j].size() == 0) continue;
			auto l = st[j].lower_bound(left);
			auto r = st[j].lower_bound(right);
			if(r == st[j].end() || *r > right) --r;
			if(l == st[j].end() || *l > right) --l;
			if(left <= *l && *r <= right && (*l) != (*r)) return 1;
		}
		return 0;
	};
	for(auto [l, r] : vec){
		while(idx <= n && bad(l - 1, r - 1)){
			st[str[point[idx] - 1] - 'a'].erase(point[idx] - 1);
			str[point[idx] - 1] = '*';
			idx += 1, best += 1;
		}
	}
	cout << best << "\n";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...