Skip to content

Instantly share code, notes, and snippets.

@masyax
Created May 19, 2016 13:21
Show Gist options
  • Save masyax/c520c360d41297035fa0f58f2ca8c4a4 to your computer and use it in GitHub Desktop.
Save masyax/c520c360d41297035fa0f58f2ca8c4a4 to your computer and use it in GitHub Desktop.
#include <algorithm>
#include <cmath>
#include <climits>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
#include <cassert>
#include <functional>
using namespace std;
#define LOG(...) printf(__VA_ARGS__)
//#define LOG(...)
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);++i)
#define REP(i,n) for(int i=0;i<(int)(n);++i)
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
#define RSORT(c) sort((c).rbegin(),(c).rend())
#define CLR(a) memset((a), 0 ,sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vb> vvb;
typedef vector<vi> vvi;
typedef vector<vll> vvll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int dx[] = { -1, 0, 1, 0 }; const int dy[] = { 0, 1, 0, -1 };
struct UnionFind {
vector<int> v;
UnionFind(int n) : v(n) { for (int i = 0; i < n; i++) v[i] = i; }
int find(int x) { return v[x] == x ? x : v[x] = find(v[x]); }
void unite(int x, int y) { v[find(x)] = find(y); }
};
int main() {
int q;
cin >> q;
list<pair<int, char>> ss;
REP(kurikaesu, q) {
int p, n;
char c;
cin >> p>> c>> n;
if (ss.empty())
ss.insert(ss.begin(), {n,c});
else {
auto it = ss.begin();
while (1) {
if (it == ss.end()) {
ss.push_back({ n,c });
break;
}
if (p < it->first) {
if (p == 0) {
ss.insert(it, {n,c});
}
else {
if (it->second == c) {
it->first += n;
}
else {
it->first -= p;
ss.insert(it, { n,c });
ss.insert(it, { p,c });
}
}
break;
}
else {
p -= it->first;
it++;
}
}
}
list<pair<int, char>> ss2=ss;
auto lit = ss2.begin();
auto rit = ss2.end();
rit--;
while (1) {
if (lit->first == 0 && rit->first == 0) {
cout << "Yes" << endl;
break;
}
if (lit->second == rit->second) {
cout << "No" << endl;
break;
}
else {
int mi = min(lit->first, rit->first);
lit->first -= mi;
rit->first -= mi;
if (lit->first == 0)
lit++;
if (rit->first == 0)
rit--;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment