Sparse Table & RMQ (Range Minimum Query)

Tutorial on Sparse Table data structure. We use it to solve Range Minimum Query by first storing minimum for every interval with a length equal to some power of 2.
problem links: www.spoj.com/problems/RMQSQ/ & cses.fi/problemset/task/1647
code github.com/Errichto/youtube/b...
Coding live streams - / errichto
FAQ - github.com/Errichto/youtube/w...
Dsicord server - / discord
Subscribe for more educational videos on algorithms, coding interviews and competitive programming.

Пікірлер: 133

  • @ayushgaba7089
    @ayushgaba70893 жыл бұрын

    He's the best competitive programmer in my opinion. He devotes so much to the community. Thankyou errichto!

  • @Thy_panda_king

    @Thy_panda_king

    3 жыл бұрын

    Totally agree 😁

  • @vishnusingh4118
    @vishnusingh41183 жыл бұрын

    This is a work of art and beauty! There are people who can do but can't teach. Then there are those who can maybe teach but can't do. Then there are legends, who can do both at a mediocre level. And then God said, "Let Errichto be". 🙌. You make complex stuff seem so mind-blowingly simple! Can't thank you enough!

  • @Errichto

    @Errichto

    3 жыл бұрын

    I think you're exaggerating but still - thank you!

  • @utkarshdevgan6199
    @utkarshdevgan61993 жыл бұрын

    This is the greatest tutorial I have ever seen, soo detailed and crystal clear!!!!!!

  • @Errichto

    @Errichto

    3 жыл бұрын

    Thanks :)

  • @saikumarganganapalli5957
    @saikumarganganapalli59573 жыл бұрын

    The transition from logorithm to constant complexity for each query had put a smile. That was so cool.😎. Excellent explanation. Keep it going.

  • @Errichto

    @Errichto

    3 жыл бұрын

    I agree that the transition is nice and satisfying.

  • @rajd7002
    @rajd70023 жыл бұрын

    Finally a video that perfectly explains the core concept. I was able to come up with log n approach before you explained and was so proud of myself. And then you dropped constant time which blew my mind. :D Thanks Errichto!

  • @nighteagle6297
    @nighteagle62972 жыл бұрын

    You are the best competitive programmer. Very thanks. I understood it very clearly. Thanks for spending a lot of time to explain us. Thank you Errichto!

  • @asifanwarsajid8332
    @asifanwarsajid83323 жыл бұрын

    Read about sparse table 2 days back. I checked if you had made any video on it. And here it is. 💯

  • @mrdude1084
    @mrdude10842 жыл бұрын

    I was looking for sparse table tutorial. When I saw Errichto's video in the list, I knew I couldn't get any luckier.

  • @hitesh6856
    @hitesh68563 жыл бұрын

    Video quality and explanation is soo good. Thank-you!!

  • @loonshott
    @loonshott2 ай бұрын

    Thanks for this amazing course. Your explanation is just in another level.

  • @kxb6098
    @kxb60983 жыл бұрын

    Clear, concise, and perfect explanation

  • @__agpatel__
    @__agpatel__3 жыл бұрын

    He is really great and down to earth person....always willing to do something good for community....👍👍👍

  • @sureshchaudhari4465
    @sureshchaudhari44652 жыл бұрын

    Errichto this is so nice and simple explanation I read it in book but did not understand you are really nice at explaining

  • @sourandbitter3062
    @sourandbitter30623 жыл бұрын

    This is very cool. Eager to learn about the segment tree. I didn't know about this. There surely are good use cases for this algorithm. For sure segment trees, or a similar structure, are used in databases.

  • @magnuseifr
    @magnuseifr3 жыл бұрын

    c++ also has builtin function __lg for base-2 logs with integers. Nice and clear explanation (as always)!

  • @Errichto

    @Errichto

    3 жыл бұрын

    Oh, right.

  • @GGxEpsilon

    @GGxEpsilon

    3 жыл бұрын

    I think log2 does the same, doesnt it?

  • @magnuseifr

    @magnuseifr

    3 жыл бұрын

    @@GGxEpsilon I think __lg belongs to the gcc compiler and is designed to work on integers (or long longs) specifically. log2 should have the same behaviour, but as Errichto mentions in the video: floating point values are scary to work with.

  • @gauravupreti9340
    @gauravupreti9340 Жыл бұрын

    Best Explanation, you made it so easy to understand. Please keep up the good work 😊

  • @sameerbamnaha2189
    @sameerbamnaha21893 жыл бұрын

    Amazing tutorial!!! Really enjoyed it and learned a lot!

  • @manjuender6286
    @manjuender62863 жыл бұрын

    Woah explained so simple, seems like a complex math but it is not once you understand the intent behind thanks a lot for the video

  • @farhan787
    @farhan7873 жыл бұрын

    Finally Errichto is back :)

  • @rishabhkalra9505
    @rishabhkalra95052 жыл бұрын

    that was indeed a really good explanation to sparse tables. Thank you for this video. :)

  • @CrystalSergeant
    @CrystalSergeant3 жыл бұрын

    I love even more your recent videos

  • @hiderr6805
    @hiderr68053 жыл бұрын

    Dzięki za pomoc w przygotowaniu do Olimpiady Informatycznej Juniorów (:

  • @joserenteria5899
    @joserenteria58992 жыл бұрын

    i love learning from Errichto more than my own profs

  • @beaujamo
    @beaujamo4 ай бұрын

    Thank you! Got mine working now! Awesome tutorial!

  • @anshusingh2473
    @anshusingh24732 жыл бұрын

    today i am practice codeforces Div2 C problem but i am not able to solve efficiently and seen editorial sparse table algorithm is used then learn this from your lecture then simply solve and learn this concept smart way very thankful for you explanation

  • @MehbubulHasanAlQuvi
    @MehbubulHasanAlQuvi3 жыл бұрын

    Keep up these good tutorials. Thanks a lot

  • @ashisharyan3028
    @ashisharyan30283 жыл бұрын

    Thank,I just needed this perfect and Crystal clear explanation .Orz

  • @ayamtaken2580
    @ayamtaken25803 жыл бұрын

    I don't understand anything you're saying, but your voice is so soothing like ASMR to me

  • @vaibhavtiwari6540

    @vaibhavtiwari6540

    2 жыл бұрын

    Lmao, simp.

  • @iftekharfahim
    @iftekharfahim3 жыл бұрын

    Please do some Videos on Data Structure. Your explanations are simple and precise.

  • @5590priyank
    @5590priyank3 жыл бұрын

    Amazing tutorial, for so long I was not sure how queries take constant time and not logN time. I always thought we need to answer each queries such that we divide range into powers of 2... finally your tutorial solved that for me that we need to take largest power of 2 which fits in given range and check from L and R end point and hence it is O(1). thank you so much for clearing this :) Also this clears why we can't use sparse table for answering range sum queries in O(1) because we are using overlapping ranges, right?

  • @AnkitJosh
    @AnkitJosh3 жыл бұрын

    Thanks ☺️ , this lecture was really helpful.

  • @coefficient1359
    @coefficient13593 жыл бұрын

    Very nice explanation Errichto

  • @anowlwithinternet9125
    @anowlwithinternet9125Ай бұрын

    You never dissappoint!

  • @BrunoSouza-wy2et
    @BrunoSouza-wy2et3 жыл бұрын

    amazing dude, I've been following your videos for a year now and you are always improving the way u teach. thanks !

  • @Errichto

    @Errichto

    3 жыл бұрын

    Let's hope that I will keep improving then :)

  • @mjKeszely
    @mjKeszely3 жыл бұрын

    Duma rozpiera, że rodak jest takim mózgiem :)

  • @plosslaw
    @plosslaw3 жыл бұрын

    Amazing stuff, good explanation

  • @subarnodatta2181
    @subarnodatta21813 жыл бұрын

    Wonderful video. Helped me a lot sir

  • @ejackkulation7377
    @ejackkulation7377 Жыл бұрын

    Thank you, Errichto.

  • @vwv.1d
    @vwv.1d Жыл бұрын

    may you get all of what you want in life..i respect you

  • @Vikash_Art
    @Vikash_Art2 жыл бұрын

    For computing "k" in the query function we can do k=floor(log2(len)) then we can have 2^k

  • @ahmmedsakibnoman2849
    @ahmmedsakibnoman28493 жыл бұрын

    plz do segment tree.. waiting for a long time..

  • @glaucoa.9214
    @glaucoa.92142 жыл бұрын

    Erichto you are the best person in the world!

  • @vineethkumar8132
    @vineethkumar81323 жыл бұрын

    Wow! its so clear even a 5 year old IQ guy lile me understands , Thank you for the wonderful content Ericchto !

  • @simonstrandgaard5503
    @simonstrandgaard55033 жыл бұрын

    Great explanation.

  • @priceandpride
    @priceandpride3 жыл бұрын

    The brain on this man

  • @shivam6829
    @shivam68293 жыл бұрын

    Please make detailed videos on segment tree and it various applications( like, min , max, updating, sum, frequency of max frequent element in the asked range etc...)

  • @i_am_wiz
    @i_am_wiz9 ай бұрын

    Won’t the time complexity for answering a single query still logN as we are computing log2(len) where len is R - L + 1 which in worst case is of the order (N). So won’t the time complexity be logN per query?

  • @siddharthmagadum16
    @siddharthmagadum163 жыл бұрын

    He's sooo clever. Thanks for the video

  • @vali8924
    @vali89243 жыл бұрын

    Very nice explanation

  • @isma--
    @isma--2 жыл бұрын

    Hey Errichto, one question, what do you use in order to write your notes, i think you use like a tablet or something

  • @madhvansharma5917
    @madhvansharma5917 Жыл бұрын

    Can we use sparse table for sum queries if we use the method where we convert ranges to binary and add it like we do in binary lifting (query time = logN)?

  • @josealejandrovaroncarreno1692
    @josealejandrovaroncarreno16923 жыл бұрын

    the best youtuber

  • @learning7517
    @learning7517 Жыл бұрын

    I agree that using log2(x) is something to be avoided generally, however, if x < 2^31, it is guaranteed that the result of (int)log2(x) will be the same of any the bit tricks, so it might be a good choice if it's faster to code.

  • @simranvedpathak7112
    @simranvedpathak71122 жыл бұрын

    Thank you !

  • @atharvasalokhe5168
    @atharvasalokhe51683 жыл бұрын

    Hello guys, I am errichto, is so cool to hear

  • @userrand4900
    @userrand490010 ай бұрын

    Is the condition in line 30, correct? It does not reflect m[i + (1

  • @ankitvats3295
    @ankitvats32952 жыл бұрын

    What an explanation! op

  • @manas_singh
    @manas_singh3 жыл бұрын

    How do you find problems on SPOJ? It seems so difficult to find by tags.

  • @nileshchandra6435
    @nileshchandra64352 жыл бұрын

    Should have checked this out before, not knowing sparse tables cost me yesterday as the seg tree failed in time.

  • @tripleaplusb2214
    @tripleaplusb22143 жыл бұрын

    Hi , can I know the name of program used to explain pls?

  • @Dima-uz8gi
    @Dima-uz8gi3 жыл бұрын

    Many thanks!

  • @darshankubavat1764
    @darshankubavat17643 жыл бұрын

    Errichto can you please make a video on how to deal with burnouts we face while constant coding?

  • @p4rzival127
    @p4rzival1273 жыл бұрын

    This reminds of Reversort in Codejam Quali

  • @srishtikdutta8946
    @srishtikdutta89463 жыл бұрын

    Awesome!!

  • @jakoolaboo
    @jakoolaboo3 жыл бұрын

    Thank you for this great video BTW : Is the __builtin function O(1) or O(log) or what ??

  • @hitesh6856

    @hitesh6856

    3 жыл бұрын

    It is O(number of bits), so it is essentially O(1)

  • @Errichto

    @Errichto

    3 жыл бұрын

    @@hitesh6856 It's O(1) rather than O(number of bits). CPU doesn't need to iterate bits one by one, it does it faster just like other basic operations like addition.

  • @hitesh6856

    @hitesh6856

    3 жыл бұрын

    ​@@Errichto ohh. I didn't knew that. Thanks! big fan..!

  • @jakoolaboo

    @jakoolaboo

    3 жыл бұрын

    @@Errichto thx for answering

  • @kongzilla2897
    @kongzilla28973 жыл бұрын

    Nice!! Binary is always Beautiful :)

  • @GGxEpsilon
    @GGxEpsilon3 жыл бұрын

    Errichto orz ❤️

  • @andrijaciric4661
    @andrijaciric46613 жыл бұрын

    It would be nice if you covered CSES problemset. It has a lot of educational problems that are hard to solve if you don't know the right technique.

  • @KuaisArts

    @KuaisArts

    3 жыл бұрын

    check out CPH. CSES is a supplementary problem set to that book. Good luck!

  • @ZakiFootballVideos
    @ZakiFootballVideos2 жыл бұрын

    Thank you

  • @therealcdubbb8040
    @therealcdubbb80402 жыл бұрын

    Can you have multiple overlapping intervals?

  • @shaoxiongduan565
    @shaoxiongduan5653 жыл бұрын

    legend.

  • @apoorvmehra121
    @apoorvmehra1213 жыл бұрын

    Amazing👍🏽👍🏽

  • @pavankumar-cy6mg
    @pavankumar-cy6mg3 жыл бұрын

    why it is k

  • @xiangli9588

    @xiangli9588

    2 жыл бұрын

    you are wrong

  • @sahilanand30
    @sahilanand306 ай бұрын

  • @rishabhpurwar4875
    @rishabhpurwar48753 жыл бұрын

    You're amazing

  • @subarnodatta2181
    @subarnodatta21813 жыл бұрын

    I don't know why people disliked this video.🤷‍♂️🤷‍♂️

  • @gnet888
    @gnet8883 жыл бұрын

    Thanks You

  • @shnerdz
    @shnerdz3 жыл бұрын

    please do segment trees next

  • @Steve168xyz
    @Steve168xyz3 жыл бұрын

    Thanks for this vid - i like your background - so the goal to the get the O(N*log((N) + Q) though N is increasing tremendously ?

  • @Errichto

    @Errichto

    3 жыл бұрын

    It's O(N*log(N) + Q) so it makes a lot of sense if Q is huge.

  • @QngTu1159
    @QngTu11593 жыл бұрын

    Can someone explain me what is “1

  • @leviackerman9882

    @leviackerman9882

    3 жыл бұрын

    Search bitwise left shift and right shift on KZread Also i think errichto has a video on bit manipulation where he explained left shift and right shift

  • @leviackerman9882

    @leviackerman9882

    3 жыл бұрын

    Here you go : kzread.info/dash/bejne/qox_rpuScrrNc7w.html

  • @QngTu1159

    @QngTu1159

    3 жыл бұрын

    @@leviackerman9882 Tks u so much

  • @apoorvmehra121

    @apoorvmehra121

    3 жыл бұрын

    It means 2 to the power k

  • @koushiksaigopalamalladi5994
    @koushiksaigopalamalladi59943 жыл бұрын

    pls do video on disjoint set union

  • @joshuawilson6907
    @joshuawilson690711 ай бұрын

    I got WA with this code on spoj, do you guys have any ideas?

  • @rohitoze9359
    @rohitoze93592 жыл бұрын

    Line 27, shouldn't it be i

  • @BGOPC
    @BGOPC3 ай бұрын

    2 year's in and still waiting for the segment tree video

  • @nalinnishant5249
    @nalinnishant52492 жыл бұрын

    We can also solve this problem using sliding window concept in O(n) time

  • @tihomirjovicicify
    @tihomirjovicicify3 жыл бұрын

    awesome

  • @aakashvishwakarma4653
    @aakashvishwakarma46533 жыл бұрын

    💯💯💯

  • @asdfinonebody4103
    @asdfinonebody41033 жыл бұрын

    good !

  • @anshusingh2473
    @anshusingh24733 жыл бұрын

    your balance bracket concept apply div2 B problem in contest get Accepted and my rank under 2500 thanks for you good job

  • @Errichto

    @Errichto

    3 жыл бұрын

    :)

  • @puneetgoel7416

    @puneetgoel7416

    3 жыл бұрын

    What balance bracket concept? Could u pls share the link of that video 🙏🙏

  • @anshusingh2473

    @anshusingh2473

    3 жыл бұрын

    kzread.info/dash/bejne/op2Il5qdfq-2mMo.html

  • @shrikantpadhy6125
    @shrikantpadhy61252 жыл бұрын

    Segment tree can also do the same right? So whats the advantage here?

  • @mohansharma-pt6yk

    @mohansharma-pt6yk

    10 ай бұрын

    Time complexity becomes O(N+Q*logN) and improves space complexity too

  • @skt7088

    @skt7088

    9 ай бұрын

    @@mohansharma-pt6yk in segment tree time complexity is O(QlogN)?

  • @parashararamesh4252
    @parashararamesh42523 жыл бұрын

    How would we handle updates?

  • @Errichto

    @Errichto

    3 жыл бұрын

    You need a segment tree for that.

  • @dhakad22klx
    @dhakad22klx Жыл бұрын

    Easily explained.

  • @tanaykulkarni822
    @tanaykulkarni8223 жыл бұрын

    It is like segment tree

  • @Shirolicious
    @Shirolicious2 жыл бұрын

    i dnno, this guy is godtier. I cannot compute. syntax error

  • @mdshahadatkabir8329
    @mdshahadatkabir83293 жыл бұрын

    Please do make how and when u started doing cp. Love your videos from Bangladesh

  • @skullcode8856
    @skullcode88562 жыл бұрын

    10:00 this was when I started thinking that sparse tables are clever.

  • @joshuawilson6907
    @joshuawilson690711 ай бұрын

    I can AC the cses problem but cant for the spoj :))

  • @anonymoussloth6687
    @anonymoussloth6687 Жыл бұрын

    I saw this somewhere to find largest power of 2 less than or equal to n: x=n While(x&(x-1)) x&=x-1; Now x will be the answer

  • @nisarggogate8952
    @nisarggogate89523 жыл бұрын

    Hey in preprocessing part inner for loop should be for(i=0;i+(1

  • @daark3113
    @daark31133 жыл бұрын

    I have no idea what queries are, and i am trying to learn