B1029 Median (two points)

B1029 Median (25分)
//该题容易爆内存
2×2×10^5×(int)4/1024=1562.5kb
用两个数组存数据就会爆内存
但是第一次没注意内存的问题用分块法水过去了,也不晓得为啥≧ ﹏ ≦,网上看了别人的解法。

  • two points

B1029 Median (two points)_第1张图片
最多占用1152KB
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=200005;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=633;//每块632个,共633块
int c[MAX];

int main()
{
   int n,m,tol=0,mid,j=0;
   scanf("%d",&n);
   for(int i=0;ic[j])
       {
           tol++;
           if(tol==mid)
            printf("%d",c[j]);
           j++;
       }
       tol++;
       if(tol==mid)
        printf("%d",temp);
    }
    while(j<=n)
    {
        tol++;
        if(tol==mid)
         printf("%d",c[j]);
        j++;
    }
  • 分块

按理来讲应该过不了啊。。。


B1029 Median (two points)_第2张图片
1964K超了啊( ̄﹏ ̄;)
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define lowbit(i)((i)&(-i))
using namespace std;
typedef long long ll;
const int MAX=400005;
const int INF=0x3f3f3f3f;
const int MOD=1000000007;
const int SQR=633;//每块632个,共633块
int table[MAX];
int blocks[SQR];
void fenkuai(int k)
{
    int sum=0;
    int idx=0;
    while(sum+blocks[idx]

你可能感兴趣的:(B1029 Median (two points))