1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
using namespace std;
const int M=(1<<20);
int dp[M*2+2][4];

void dod(int a, int b, int kol)
{
    a+=M; b+=M;
    dp[a][kol]++;
    if(a!=b) dp[b][kol]++;
    while(a/2!=b/2)
    {
        if(a%2==0) dp[a+1][kol]++;
        if(b%2==1) dp[b-1][kol]++;
        a/=2; b/=2;
    }
}

int spr(int a)
{
    a+=M;
    int z=0,n=0,c=0;
    while(a>0)
    {
        z+=dp[a][1]; n+=dp[a][2]; c+=dp[a][3];
        a/=2;
    }
    if(z>0 && n>0 && c==0) return 1;
    return 0;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int n,m,a,b,kol, wyn=0;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b>>kol;
        dod(a,b,kol);
    }
    for(int i=1;i<=n;i++) wyn+=spr(i);
    cout<<wyn;
    return 0;
}