Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- int main(){
- int ni, nc;
- scanf("%d", &ni);
- scanf("%d", &nc);
- vector<int> L, R;
- vector<int> events = {1, ni + 1};
- for(int i = 1; i <= nc; ++i){
- int l, r;
- scanf("%d", &l);
- scanf("%d", &r);
- L.push_back(l);
- R.push_back(r);
- events.push_back(l);
- events.push_back(r + 1);
- }
- sort(events.begin(), events.end());
- events.resize(unique(events.begin(), events.end()) - events.begin());
- vector<int> lizard(events.size(), 0); /// 0 = R 1 = G 2 = B
- for(int i = 0; i < nc; ++i){
- int indexl = lower_bound(events.begin(), events.end(), L[i]) - events.begin();
- int indexr = lower_bound(events.begin(), events.end(), R[i] + 1) - events.begin();
- ++lizard[indexl];
- --lizard[indexr];
- }
- char tmp;
- int tr;
- scanf(" %c", &tmp);
- switch(tmp){
- case 'R':
- tr = 0;
- break;
- case 'G':
- tr = 1;
- break;
- case 'B':
- tr = 2;
- break;
- }
- int sum = 0;
- lizard[0] %= 3;
- for(int i = 1; i < events.size(); ++i){
- lizard[i] += lizard[i - 1];
- lizard[i] %= 3;
- if(lizard[i] < 0){
- lizard[i] += 3;
- }
- if(lizard[i - 1] < tr){
- sum += (events[i] - events[i - 1]) * (tr - lizard[i - 1]);
- } else if(lizard[i - 1] > tr){
- sum += (events[i] - events[i - 1]) * (3 + tr - lizard[i - 1]);
- }
- }
- cout << sum;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement