Problem: Example

Input

3 2
3
1 2 1
2 3 2
3 3 1


Output

1

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;

#define int long long
typedef pair<int,int>pint;
typedef vector<int>vint;
typedef vector<pint>vpint;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,f,n) for(int i=(f);i<(n);i++)
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
template<class T,class U>inline void chmin(T &t,U f){if(t>f)t=f;}
template<class T,class U>inline void chmax(T &t,U f){if(t<f)t=f;}

const int SEG=1<<18;
pint seg[SEG*2];
pint put[SEG*2];
const pint none(-100,-100);
const pint fail(-10,-10);

inline void push(int k){
    if(put[k]==none)return;
    if(put[k]==fail){
        seg[k]=fail;
    }
    if(seg[k].se+1==put[k].fi){
        seg[k].se=put[k].se;
    }
    else{
        seg[k]=fail;
    }
    if(k<SEG-1){
            for(int i=1;i<=2;i++){
                if(put[k*2+i]==none)put[k*2+i]=put[k];
                else if(put[k*2+i]==fail)continue;
                else if(put[k]==fail||put[k*2+i].se+1!=put[k].fi)put[k*2+i]=fail;
                else put[k*2+i].se=put[k].se;
            }
    }
    put[k]=none;
}

void update(int a,int b,pint s,int k=0,int l=0,int r=SEG){
    push(k);
    if(r<=a||b<=l)return;
    if(a<=l&&r<=b){
        put[k]=s;
        push(k);
        return;
    }
    update(a,b,s,k*2+1,l,(l+r)/2);
    update(a,b,s,k*2+2,(l+r)/2,r);
}

signed main(){
    int N,K;
    cin>>N>>K;

    rep(i,SEG*2){
        seg[i]=pint(0,0);
        put[i]=none;
    }

    int Q;cin>>Q;
    while(Q--){
        int a,b,c;
        cin>>a>>b>>c;
        a--;
        update(a,b,pint(c,c));
    }
    rep(i,SEG*2)push(i);
    int ans=0;
    rep(i,N)if(seg[SEG-1+i]==pint(0,K))ans++;
    cout<<ans<<endl;
    return 0;
}