Submission #251855

# Submission time Handle Problem Language Result Execution time Memory
251855 2020-07-22T11:43:05 Z leaked Automobil (COCI17_automobil) C++14
0 / 100
39 ms 512 KB
#include<bits/stdc++.h>
using namespace std;
//#include<ext/pb_ds/assoc_container.hpp>
//#include<ext/pb_ds/tree_policy.hpp>
//
//    #pragma GCC optimize("unroll-loops")
//    #pragma GCC optimize("Ofast")
//    #pragma GCC optimize("-O3")
//    #pragma GCC optimize("no-stack-protector")
//    #pragma GCC optimize("fast-math")
//#define LOCAL
#define sim template < class c
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifndef LOCAL
~debug() { cerr << endl; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
	*this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define fi first
#define f first
#define se second
#define s second
#define vi_a vector<int>a;
#define p_b push_back
////////////////////////////////???????????????CHECK THIS OUT???????????????//////////////////////////////
#define ll long long
typedef unsigned long long ull;
////////////////////////////////???????????????CHECK THIS OUT???????????????//////////////////////////////
#define ld long double
#define pll pair<ll,ll>
#define pii pair<int,int>
#define m_p make_pair
#define fast_io cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(0);
#define all(x) x.begin(),x.end()
#define getfiles    ifstream cin("input.txt");ofstream cout("output.txt");
#define pw(x) (1ll << x)
#define sz(x) (int)x.size()
#define endl "\n"
#define rall(x) x.rbegin(),x.rend()
#define len(a) (ll)a.size()
#define rep(x,l,r) for(ll x=l;x<r;x++)

//using namespace __gnu_pbds;
ld eps = (ld)1 / 1e6;
const ld pi=3.14159265359;
ll inf = 1e18,mod1=1e9+7;
ll sqr(ll a) { return a * a; }
ll qb(ll a) { return a * a * a; }
ll gcd(ll a, ll b) { return !a ? b : gcd(b % a, a); }
ll binpow(ll a, ll b, ll mod) { return b ? (b % 2 ? (a * (sqr(binpow(a, b / 2, mod)) % mod)) % mod : sqr(binpow(a, b / 2, mod)) % mod) : 1; }
ll binmult(ll a, ll b, ll mod) { return b ? (b % 2 ? (2 * binmult(a, b / 2, mod) + a) % mod : (2 * binmult(a, b / 2, mod)) % mod) : 0; }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const ll R=1e4;
const ll tx[4]={0,0,-1,1};
const ll ty[4]={-1,1,0,0};
const char rev_to[4]={'E','W','N','S'};
const int N=1e6+1e5;
const int M=1e9+7;
//typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> st;
auto rnd=bind(uniform_int_distribution<ll>(1,1e18),mt19937(time(0)));
char c[N];ll a1[N],a2[N];
signed main()
{
    fast_io;
    ll n,m,k;
    cin>>n>>m>>k;
    ll ans=((1+n*m)%M*(n*m)%M);
    int po=binpow(2,M-2,M);
    ans=ans*po%M;
    for(int i=0;i<k;i++){
        cin>>c[i]>>a1[i]>>a2[i];
        if(c[i]=='R'){
            ll f=(1+(a1[i]-1)*m)%M;
            ll last=(f+m-1)%M;
            ll perv=(f+last)*m%M*po%M;
            ll total=1;
            set<pll>st;
            for(int j=0;j<i;j++){
                if(c[j]==c[i]){
                    if(a1[j]==a1[i]){
                        perv=perv*a2[j]%M;
                        total=(total*a2[j])%M;
                    }
                }else{
                    auto c=st.lower_bound({a1[j],(ll)0});
                    if(c!=st.end() && c->f==a1[j]){
                        ll prev=c->s;
                        ll nxt=(prev*a2[j])%M;
                        perv=(perv-prev+M)%M;
                        perv=(perv+nxt)%M;
                        st.erase(c);
                        st.insert({a1[j],nxt});
                    }else{
                        ll prev=(total)%M*(f+a1[j]-1)%M;
                        ll nxt=prev*a2[j]%M;
                        perv=(perv-prev+M)%M;
                        perv=(perv+nxt)%M;
                        st.insert({a1[j],nxt});
                    }
                }
            }
            ans=(ans-perv+M)%M;
            ans=(ans+(perv*a2[i])%M)%M;
        }else{
            ll f=(1+(a1[i]-1))%M;
            ll last=(f+(n-1)*m)%M;
            ll perv=(f+last)*n%M*po%M;
            ll total=1;
            set<pll>st;
            for(int j=0;j<i;j++){
                if(c[j]==c[i]){
                    if(a1[j]==a1[i]){
                        perv=perv*a2[j]%M;
                        total=(total*a2[j])%M;
                    }
                }else{
                    auto c=st.lower_bound({a1[j],(ll)0});
                    if(c!=st.end() && c->f==a1[j]){
                        ll prev=c->s;
                        ll nxt=(prev*a2[j])%M;
                        perv=(perv-prev+M)%M;
                        perv=(perv+nxt)%M;
                        st.erase(c);
                        st.insert({a1[j],nxt});
                    }else{
                        ll prev=(total)%M*(f+(a1[j]-1)*m)%M;
                        ll nxt=prev*a2[j]%M;
                        perv=(perv-prev+M)%M;
                        perv=(perv+nxt)%M;
                        st.insert({a1[j],nxt});
                    }
                }
            }
            ans=(ans-perv+M)%M;
            ans=(ans+(perv*a2[i])%M)%M;
        }
    }
    cout<<ans;
    return 0;
}
/*
1  0  3  4
5  0  7  8

/
*/
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
2 Incorrect 13 ms 384 KB Output isn't correct
3 Incorrect 1 ms 384 KB Output isn't correct
4 Incorrect 24 ms 384 KB Output isn't correct
5 Incorrect 9 ms 384 KB Output isn't correct
6 Incorrect 3 ms 384 KB Output isn't correct
7 Incorrect 19 ms 384 KB Output isn't correct
8 Incorrect 6 ms 384 KB Output isn't correct
9 Incorrect 15 ms 384 KB Output isn't correct
10 Incorrect 25 ms 384 KB Output isn't correct
11 Incorrect 10 ms 384 KB Output isn't correct
12 Incorrect 37 ms 384 KB Output isn't correct
13 Incorrect 7 ms 384 KB Output isn't correct
14 Incorrect 1 ms 384 KB Output isn't correct
15 Incorrect 24 ms 384 KB Output isn't correct
16 Incorrect 38 ms 384 KB Output isn't correct
17 Incorrect 38 ms 512 KB Output isn't correct
18 Incorrect 39 ms 512 KB Output isn't correct
19 Incorrect 39 ms 384 KB Output isn't correct
20 Incorrect 38 ms 384 KB Output isn't correct