| 
 | 
вернуться в форум0.031s 312KB C++ sulotion I've been stuck in this problem for a very long time, but today I got the idea of Binary Indexed Tree from wikipedia and finally solved this problem :) Binary Indexed Tree,or BIT, can be viewed as a simplified version of Segment Tree,easier to code and less function to perform. But It's enough to solve this problem   #include<iostream> #include<cstdio> using namespace std;   const int Max = 32005;   int n; int c[Max] = {0}; int level[Max] = {0};   int lowbit(int x) {     return x&(-x); }   int sum(int i) {     int s = 0;     while(i > 0)     {         s += c[i];         i -= lowbit(i);     }     return s; }   void update(int pos,int val) {     while(pos <= Max)     {         c[pos] += val;         pos += lowbit(pos);     } }   int main() {     scanf("%d",&n);     for(int i = 0; i < n; i ++)     {         int x,y;         scanf("%d%d",&x,&y);         x ++;         level[ sum(x) ] ++;         update(x,1);     }
      for(int i = 0; i < n; i ++)    printf("%d\n",level[i]); } Re: 0.031s 312KB C++ sulotion How can this even be correct if you don't use the y-coordinates at all? Re: 0.031s 312KB C++ sulotion Послано  Abzal 10 июл 2012 00:54 Because in statement there was written that y-coordinates are already sorted Re: 0.031s 312KB C++ sulotion in function main,why you use "x ++"? Re: 0.031s 312KB C++ sulotion cose in problem x in [0,32000 ]   so 0 is bad value for binary :)   so we just shift all x on some const ( just 1) so all value between 1 and power(2,someN) Re: 0.031s 312KB C++ sulotion Why do you use 32005 as a size of an array? Re: 0.031s 312KB C++ sulotion Because it is given in constraint. That x and y values will be less than 32000.  |  
  | 
|