From 4e5ca336e28c0a4669a8db2189676c3ebc5e4366 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:21:38 +0530 Subject: [PATCH 1/8] 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/8] 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/8] 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(); +} From 3d3b9c90d659785bbdf68f280cb11fe0435270d1 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:56:04 +0530 Subject: [PATCH 4/8] Create solution1.cpp --- .../DifferenceArray/soln/Sujal/solution1.cpp | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 algos/range_queries/DifferenceArray/soln/Sujal/solution1.cpp diff --git a/algos/range_queries/DifferenceArray/soln/Sujal/solution1.cpp b/algos/range_queries/DifferenceArray/soln/Sujal/solution1.cpp new file mode 100644 index 0000000..13f40fe --- /dev/null +++ b/algos/range_queries/DifferenceArray/soln/Sujal/solution1.cpp @@ -0,0 +1,87 @@ +//submission link - https://cses.fi/problemset/result/15793543/ + + +/* +Problem: +You are given an array of n integers. +You need to process q queries of two types: +1) Add value u to all elements in range [a, b] +2) Print the value at position k + +Queries are mixed and can come in any order. + +Approach: +We use a Fenwick Tree (Binary Indexed Tree). + +Idea: +- We convert range update into two point updates: + add u at index a + subtract u at index b+1 +- Fenwick Tree stores these updates. +- For query type 2, we take prefix sum up to k + and add it to the original value at index k. + +This works because prefix sum gives +the total update applied to that position. + +Time Complexity: +- Each update: O(log n) +- Each query: O(log n) +- Total: O((n + q) log n) + +Space Complexity: +- O(n) +*/ + +#include +using namespace std; + +struct Fenwick{ + int n; + vector bit; + + Fenwick(int n):n(n),bit(n+1,0){} + + void add(int i,long long v){ + for(;i<=n;i+=i&-i) + bit[i]+=v; + } + + long long sum(int i){ + long long s=0; + for(;i>0;i-=i&-i) + s+=bit[i]; + return s; + } +}; + +int main(){ + ios::sync_with_stdio(false); + cin.tie(nullptr); + + int n,q; + cin>>n>>q; + + vectorx(n+1); + for(int i=1;i<=n;i++) + cin>>x[i]; + + Fenwick fw(n+1); + + while(q--){ + int type; + cin>>type; + + if(type==1){ + int a,b; + long long u; + cin>>a>>b>>u; + fw.add(a,u); + fw.add(b+1,-u); + }else{ + int k; + cin>>k; + cout< Date: Thu, 1 Jan 2026 10:57:59 +0530 Subject: [PATCH 5/8] Update b_reverse_sort.cpp --- .../PrefixSum/soln/Sujal/b_reverse_sort.cpp | 50 ------------------- 1 file changed, 50 deletions(-) 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 53ff766..8b13789 100644 --- a/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp +++ b/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp @@ -1,51 +1 @@ -//PROBLEM STATEMENT- https://codeforces.com/problemset/problem/1605/B -//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) -//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 d5def24f4f0f4602d9ee3a3d860df436aa070bf1 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:58:17 +0530 Subject: [PATCH 6/8] Update tracking_segments.cpp --- .../soln/Sujal/tracking_segments.cpp | 52 ------------------- 1 file changed, 52 deletions(-) diff --git a/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp b/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp index f80b661..8b13789 100644 --- a/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp +++ b/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp @@ -1,53 +1 @@ -//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(); -} From d87916eeede38dfdc72ae9461dd00dd89cd2912e Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:58:35 +0530 Subject: [PATCH 7/8] Delete algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp --- algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp | 1 - 1 file changed, 1 deletion(-) delete 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 deleted file mode 100644 index 8b13789..0000000 --- a/algos/range_queries/PrefixSum/soln/Sujal/b_reverse_sort.cpp +++ /dev/null @@ -1 +0,0 @@ - From a534dd32184d21590a8f2ff024cc00f7710f12f1 Mon Sep 17 00:00:00 2001 From: suzzzal Date: Thu, 1 Jan 2026 10:58:45 +0530 Subject: [PATCH 8/8] Delete algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp --- algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp | 1 - 1 file changed, 1 deletion(-) delete 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 deleted file mode 100644 index 8b13789..0000000 --- a/algos/range_queries/PrefixSum/soln/Sujal/tracking_segments.cpp +++ /dev/null @@ -1 +0,0 @@ -