sdssudhu's blog

By sdssudhu, history, 6 years ago, In English

I was recently reading about aho corasick and suffix trees. I felt that suffix tree operations are a superset of aho corasick operations. Is my assumption correct or can aho corasick perform some kind of query/operation that cannot be performed by suffix trees.

Full text and comments »

  • Vote: I like it
  • +4
  • Vote: I do not like it

By sdssudhu, history, 6 years ago, In English

This is the snippet I have for FFT. But I feel it is slow in many cases.

One example is http://mirror.codeforces.com/problemset/submission/958/41610928 which takes nearly 3.85 seconds to pass for n=200000

Can somebody help me to optimise it.

Thanks.

Full text and comments »

  • Vote: I like it
  • +5
  • Vote: I do not like it

By sdssudhu, history, 7 years ago, In English

I was learning about treap sometime back and I was trying a few problems today. Now I am wondering if MKTHNUM can be solved using a treap. And if possible can insertion queries also be handled with it ??

Full text and comments »

  • Vote: I like it
  • 0
  • Vote: I do not like it

By sdssudhu, history, 7 years ago, In English

I use this post to try and explain an alternative to HLD that I have been using for more than a couple of months.

As many of you might be familiar HLD is a very tough thing to implement and is time-taking and must be implemented carefully.

Also if HLD sums are asked in short contests then it is going to be difficult to implement. Hence I came up with this technique.

I will try and explain this concept with the july long contest problem.

In this problem the value of number of nodes is given to be 10^5 which means maximum depth of the tree is 10^5 (worst case). What I do is I perform a dfs in the tree and for every node whose depth%1000=1, I store the values of all its ancestors.

In worst case the memory complexity is (1000+2000+...10^5)= 1000(1+2+3+....+100) = 5*10^6. After this I sort all these values and take a prefix xor.

Now for each query I have to travel up atmost 1000 ancestors and arrive at an ancestor whose depth%1000=1 and from there we can find xor of all elements less than k. We do this for both nodes U and V(source and destination). Because of the property of XOR all the values of the ancestors are canceled out.

Hence each query is (1000*Q) in the worst case.

Though this is somewhat testing the upper limits we can actually dynamically change the value in which we store the ancestors(1000 in this case). However this has not been required so far for me.

This is because we such situations(which test upper limits) rarely occur but even for that depending on the tree we can change the depth value.

Another question I solved using this techique is GPD in codechef. GPD can also be solved using persistent trie but this method is far more easier.

My solutions for : PSHTTR : GPD

In case for sum of values in the path between 2 nodes we can store sum of ancestors and we can find answer by:

sum upto U + sum upto V — sum upto LCA(U,V)

Upd1: If the maximum depth of tree is less than 1000 you can directly climb up the tree and do the calculations.

Also as Diversity pointed out there can be cases where there are 10^5-1000 nodes which have depth%1000=1. For overcoming this we can have an initial dfs that has a count of depth%1000=1,2,3,4,...,999 and we can choose values which satisfy the memory limit using count(This is the dynamic change of value I mentioned).Also I believe we can strech upto depth%2000.

Note: I have not tried implementing this technique of changing node depth of storing values dynamically.

Full text and comments »

  • Vote: I like it
  • -7
  • Vote: I do not like it

By sdssudhu, history, 8 years ago, In English

Link to question -- https://www.codechef.com/DEC16/problems/SEAINCR/

Could anybody give me a detailed explanation of how to solve this question from Codechef DEC16 long challenge.

Note : I know to find LIS in O(nlogn) but due to the number of queries my solution gets 30 points and gets a TLE in larger cases.

Full text and comments »

  • Vote: I like it
  • +23
  • Vote: I do not like it