#include <bits/stdc++.h> using namespace std; void insert(vector<vector<int> > &v, int g, int p, int k, int &x, int &y, int &col) { if(x<=p && y>=k) { v[g][col]=1; return; } int sr=(p+k)/2; if(x<=sr) insert(v, 2*g, p, sr, x, y, col); if(y>sr) insert(v, 2*g+1, sr+1, k, x, y, col); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); int n,m; cin>>n>>m; int R=1; while(R<n){R=R*2;} vector<vector<int> > dr(2*R, vector<int> (4, 0)); for(int i=0; i<m; i++) { int a,b,c; cin>>a>>b>>c; insert(dr, 1, 1, R, a, b, c); } int w=0; for(int i=R; i<R+n; i++) { int j=i; bool z=0, n=0, c=0; while(j>0) { if(dr[j][1]==1) z=1; if(dr[j][2]==1) n=1; if(dr[j][3]==1) c=1; j=j/2; } if(z && n && !c) w++; } cout<<w<<'\n'; }
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 46 47 48 49 50 51 52 53 54 55 | #include <bits/stdc++.h> using namespace std; void insert(vector<vector<int> > &v, int g, int p, int k, int &x, int &y, int &col) { if(x<=p && y>=k) { v[g][col]=1; return; } int sr=(p+k)/2; if(x<=sr) insert(v, 2*g, p, sr, x, y, col); if(y>sr) insert(v, 2*g+1, sr+1, k, x, y, col); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); int n,m; cin>>n>>m; int R=1; while(R<n){R=R*2;} vector<vector<int> > dr(2*R, vector<int> (4, 0)); for(int i=0; i<m; i++) { int a,b,c; cin>>a>>b>>c; insert(dr, 1, 1, R, a, b, c); } int w=0; for(int i=R; i<R+n; i++) { int j=i; bool z=0, n=0, c=0; while(j>0) { if(dr[j][1]==1) z=1; if(dr[j][2]==1) n=1; if(dr[j][3]==1) c=1; j=j/2; } if(z && n && !c) w++; } cout<<w<<'\n'; } |