AshrafSustS19's blog

By AshrafSustS19, history, 22 months ago, In English

For offline queries, we can sort them using sqrt decomposition to minimize query traversal costs. This is very useful especially in situations where query answers can be generated using two pointers method. For this, we first divide the total query range in sqn = sqrt(n) sections. We first sort the queries in order of which section the starting point fell in, than in each section we sort the queries based on the order ending point from large to small or (small to large). I used a slightly altered implementation for this problem. Instead of using large to small or small to large endpoint at section. I sorted them in an altering structure. Therefore, if in section 1, we sort them from large to small, in section 2 we sort them from small to large, then in section 3 we again sort them from large to small. I think this implementation is quite faster on average, and in the problem I tested both the default and customized implementation. The latter proved to be almost twice as fast as the former. The implementation is as follows

struct Qry{
    lli l, r, ind;
    Qry(lli _l, lli _r, lli _ind){
        l = _l, r = _r, ind = _ind;
    }
};
 
bool cmp(Qry &a, Qry &b){
    if (a.l / sqn < b.l / sqn) return true;
    else if ((a.l / sqn == b.l / sqn)){
        if ((a.l / sqn) % 2 == 0){
            return a.r < b.r;
        }
        else {
            return a.r > b.r;
        }
    } 
    return false;
}
  • Vote: I like it
  • -11
  • Vote: I do not like it

| Write comment?
»
22 months ago, # |
  Vote: I like it 0 Vote: I do not like it

go learn binary search

  • »
    »
    22 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Solve 86D - Powerful array with binary search only, I will consider "go learn binary search" then

    • »
      »
      »
      22 months ago, # ^ |
      Rev. 2   Vote: I like it -10 Vote: I do not like it

      at your level, you will never need to solve a problem that requires that much DS knowledge in contest.

      • »
        »
        »
        »
        22 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        I practice 1900-2000 rating problems, and I don't see how learning "binary search" deals with 1900-2000 problems. Please kindly explain.

        • »
          »
          »
          »
          »
          22 months ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          It's a joke. In short, I mean at your current level you don't need to learn any heavy data structures/algorithms. Just solving/practicing adhoc, constructive, and practicing problem solving in general should be enough.

          • »
            »
            »
            »
            »
            »
            22 months ago, # ^ |
              Vote: I like it 0 Vote: I do not like it

            Very lame and derogatory way of making a joke, you talk like a child

      • »
        »
        »
        »
        21 month(s) ago, # ^ |
          Vote: I like it +1 Vote: I do not like it

        If his wish is not improving rating then you can't talk like that. Many of us just love solving problems,rather than ranting about rating. But if he ever posts "why my rating is still stuck at 1400 despite solving > 2200" then your comment will be a sledgehammer to that post.