Easy solution || set+segmentTree
Intuition\nYou need a rich data structure in which you can store , also update the segment when you need to insert a block within an existing segment, and also 
# Intuition\nYou need a rich data structure in which you can store , also update the segment when you need to insert a block within an existing segment, and also able to query the largest segment size in given range \n\nWhat we can do in these type of question is that we store only the starting positon of segment in any ordered data structure(I used "set" in solution) and when dividing a segemnt we add the starting point in the data structure and update the size of segment accordingly  \n\n# Approach\n<!-- Describe your approach to solving the problem. -->\nconnect the data structure in which you are storing the starting points of segments to a max segmentTree in which you will be storing the size of the segemnt on the index of starting point of segment and the update the data structure accordingly based on queries \n\n\n\n# Code\n```\nconst int N=5e4;\n#define ll int\nclass Solution {\npublic:\nstruct segtree{\n \n\tint size;\n\tvector<ll> sums;\n\tvoid init(int n){\n\t\tsize=1;\n\t\twhile(size<n) size*=2;\n\t\tsums.resize(2*size,0ll);\n \n\t}\n\tvoid set(int i,int v,int x,int lx,int rx ){\n\t\tif(rx-lx==1){\n\t\t\tsums[x]=v;\n\t\t\treturn;\n\t\t}\n\t\tint m=(lx+rx)/2;\n\t\tif(i<m){\n\t\t\tset(i,v,2*x+1,lx,m);\n\t\t}else {\n\t\t\tset(i,v,2*x+2,m,rx);\n\t\t}\n\t\tsums[x]=max(sums[2*x+1],sums[2*x+2]);\n\t}\n \n\tvoid set(int i,int v){\n\t\tset(i,v,0,0,size);\n \n\t}\n \n\tll query(int l,int r,int x,int lx,int rx){\n\t\tif(rx<= l || lx>=r) return 0;\n\t\t\n\t\t if(rx<=r && lx>= l) return sums[x];\n\t\t\n\t\telse {\n\t\t\tint m=(lx+rx)/2;\n\t\t\tll s1=query(l,r,2*x+1,lx,m);\n\t\t\tll s2=query(l,r,2*x+2,m,rx);\n\t\t\treturn max(s1,s2);\n\t\t}\n\t\t\n\t}\n \n\tll query(int l,int r){\n\t\treturn query(l,r,0,0,size);\n \n\t}\n \n};\n    vector<bool> getResults(vector<vector<int>>& q) {\n        segtree st;\n        st.init(N);\n        st.set(0,1e9); //first segment (infinite) \n        set<int> s;\n        s.insert(0);\n        vector<bool> ans;\n        for(int i=0;i<q.size();i++){\n            int a=q[i][0];\n            if(a==1){\n                int x=q[i][1];\n                auto it=s.lower_bound(x);\n                --it;\n                int prev=st.query(*it,*it+1); //prev size of segment \n                st.set(*it,x-*it); //new size of seg1\n                st.set(x,prev-x+*it); //new size of seg2\n                s.insert(x);\n                \n\n            }else {\n                int sz=q[i][2];\n                int x=q[i][1];\n                int b=st.query(0,x-sz+1);\n                if(b>=sz){\n                    ans.push_back(1);\n                }else {\n                    ans.push_back(0);\n                }\n\n            }\n\n        }\n        return ans;\n\n        \n    }\n};\n```
['C++']