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;
typedef pair<int,int>P;

struct segtree{
  int n;
  vector<P>lazy;

  segtree(int sz){
    n = 1; while( n < sz ) n<<=1;
    lazy.resize(2*n-1);
    for(int i=0;i<2*n-1;i++)lazy[i]=P(0,0);
  }

  void eval(int k,P x,int l,int r){
    if(x.second==0)return ;
    if(lazy[k].second==0)lazy[k]=x;
    else if(lazy[k].second+1==x.first)lazy[k].second=x.second;
    else lazy[k]=P(1e9,1e9);
  }

  void add(int a,int b,int x,int k=0,int l=0,int r=-1){
    if(r==-1)r=n;
    if(b<=l || r<=a)return;
    if(a<=l&&r<=b){ eval(k,P(x,x),l,r); }
    else{
      eval(k*2+1,lazy[k],l,r);
      eval(k*2+2,lazy[k],l,r);
      lazy[k]=P(0,0);
      add(a,b,x,2*k+1,l,(l+r)/2);
      add(a,b,x,2*k+2,(l+r)/2,r);
    }
  }
};

#define r(i,n) for(int i=0;i<n;i++)

int main(){
  int n,K,t,sum=0;
  cin>>n>>K>>t;
  segtree S(n);
  r(i,t){
    int l,r,x;
    cin>>l>>r>>x; l--; r--;
    S.add(l,r+1,x);
  }
  r(i,n)S.add(i,i+1,K+1);
  r(i,S.n*2-1){
    if(S.lazy[i].first==1 && S.lazy[i].second==K+1){
      sum++;
    }
  }
  cout<<sum<<endl;
}