From 4e5ca336e28c0a4669a8db2189676c3ebc5e4366 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:21:38 +0530 Subject: [PATCH 1/3] Create b_reverse_sort.cpp --- .../PrefixSum/soln/Sujal/b_reverse_sort.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp diff --git a/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp b/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp new file mode 100644 index 0000000..b1c8ffb --- /dev/null +++ b/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp @@ -0,0 +1,49 @@ +//PROBLEM STATEMENT- https://codeforces.com/problemset/problem/1605/B +//SUBMISSION LINK- https://codeforces.com/problemset/submission/1605/356028086 +//APPROACH- For every gap, check the ones on left and zeroes on right using prefix and suffix sums +// if at any point, they are equal(and non zero), they can be swapped +//TIME COMPLEXITY- O(n*n) +//SPACE COMPLEXITY- O(n*n) + + + + +#include +using namespace std; + +void solve(){ + int n;cin>>n; + string s;cin>>s; + if(n==1){cout<<0<<"\n";return;} + + vector> L(n-1),R(n-1); + + if(s[0]=='1')L[0].push_back(0); + for(int i=1;i0;i--){ + R[i-1]=R[i]; + if(s[i]=='0')R[i-1].push_back(i); + } + + for(int i=0;i>t; + while(t--)solve(); +} From cda1ece330293e612e8636f77c23385a5c5dc974 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:23:50 +0530 Subject: [PATCH 2/3] Update b_reverse_sort.cpp --- algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp b/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp index b1c8ffb..53ff766 100644 --- a/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp +++ b/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp @@ -1,5 +1,7 @@ //PROBLEM STATEMENT- https://codeforces.com/problemset/problem/1605/B -//SUBMISSION LINK- https://codeforces.com/problemset/submission/1605/356028086 + +//SUBMISSION LINK- https://codeforces.com/problemset/submission/1605/356028420 + //APPROACH- For every gap, check the ones on left and zeroes on right using prefix and suffix sums // if at any point, they are equal(and non zero), they can be swapped //TIME COMPLEXITY- O(n*n) From 94f7714750d09e877dc04f8fed5d43ef6674d46d Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:27:08 +0530 Subject: [PATCH 3/3] Create tracking_segments.cpp --- .../soln/Sujal/tracking_segments.cpp | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp diff --git a/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp b/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp new file mode 100644 index 0000000..f80b661 --- /dev/null +++ b/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp @@ -0,0 +1,53 @@ +//PROBLEM STATEMENT- https://codeforces.com/problemset/problem/1843/E + +//SUBMISSION LINK- https://codeforces.com/problemset/submission/1843/356028549 + + +//APPROACH- Standard binary search on queries as they are monotonues (F F F T T TT) +//TIME COMPLEXITY- O(nlogn) +//SPACE COMPLEXITY- O(n) + + + + +#include +using namespace std; + +bool ok(vector>&seg,vector&q,int mid,int n){ + vectora(n,0); + for(int i=0;ipre(n+1,0); + for(int i=0;i(p.second-p.first+1)/2) + return true; + } + return false; +} + +void solve(){ + int n,m;cin>>n>>m; + vector>seg(m); + for(int i=0;i>seg[i].first>>seg[i].second; + + int qn;cin>>qn; + vectorq(qn); + for(int i=0;i>q[i]; + + int l=1,r=qn,ans=-1; + while(l<=r){ + int mid=(l+r)/2; + if(ok(seg,q,mid,n)){ + ans=mid; + r=mid-1; + }else l=mid+1; + } + cout<>t; + while(t--)solve(); +}