71 条题解

  • -1
    @ 2009-03-05 21:41:42

    为什么第二个点运行时错误呢??

    #include

    #include

    using namespace std;

    long long n;

    long long opr;

    long long manager[2000];

    long long w[1500][1500] = {0};

    long long lowbit( long long x )

    {

    return x & ( x ^ ( x - 1 ) );

    }

    void increase( long long hang , long long lie , long long k )

    {

    w[hang][lie] += k;

    if( manager[lie] > n ) return ;

    increase( hang , manager[lie] , k );

    }

    long long total( long long hang , long long lie )

    {

    long long temp = lie;

    long long cur = 0;

    while( temp > 0 )

    {

    cur += w[hang][temp];

    temp -= lowbit( temp );

    }

    return cur;

    }

    int main()

    {

    for( int i = 1500 ; i >= 1 ; i -- )

    {

    int low = lowbit( i );

    if( low != 1 )

    for( int j = i - low + 1 ; j < i ; j ++ )

    manager[j] = i;

    }

    cin >> n;

    while( cin >> opr )

    {

    if( opr == 3 ) break;

    if( opr == 1 )

    {

    int x , y , k;

    cin >> x >> y >> k;

    increase( x + 1 , y + 1 , k );

    }

    if( opr == 2 )

    {

    int x1 , y1;

    int x2 , y2;

    long long sum = 0;

    cin >> x1 >> y1 >> x2 >> y2;

    x1 ++ ; y1 ++ ; x2 ++ ; y2 ++ ;

    for( int i = x1 ; i

  • -1
    @ 2009-03-05 21:16:59

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    就算是SuperBrother你也得给个数据范围啊

  • -1
    @ 2009-03-01 19:46:34

    二维树状数组,加一个公式:

    sum[x1,y1,x2,y2]=sum[1,1,x2,y2]-sum[1,1,x1-1,y2]-sum[1,1,x2,y1-1]+sum[1,1,x1-1,y1-1]

    主要存sum[1,1,i,j]就行了。

    一开始居然写错了……

  • -1
    @ 2009-02-26 21:20:47

    二维线段树怎么mle了

  • -1
    @ 2009-02-24 20:19:33

    同楼上解。。

    幸好数据不太变态

    测试数据的m==1次数不算多。。如果超多那就是10000*..............

    就完了。。

  • -1
    @ 2009-02-24 18:02:48

    这题。。也太水了。。

    主要是数据太弱,还有就是vj跑的太快了

    如果数据强点还是很不错的

    数据弱也不想写线段树了

    while m3 do

    begin

    read(m);

    m=1 则 保存到数组中







    m=2 则

    for i:=1 to total do

    查找数组中在此范围内的点,累计他的值

    writeln(累计的值);

    end;

    速度非常的快

    前9组0ms

    最后一组41ms

  • -1
    @ 2009-02-24 09:25:26

    此题无需高级数据结构,有一种使用的朴素算法

    对于每个查询,只需统计此前加入的鼹鼠数是否在查询范围内

    Orz xiongji 大牛

  • -1
    @ 2009-02-22 20:40:51

    二维树状数组即可 ^-^

  • -1
    @ 2009-02-21 22:34:38

    二维线段树,我写的太ws了112行,耗时2500ms,不知怎么回事

  • -1
    @ 2009-02-21 19:25:04

    巨弱的我分不清线段树和树状数组。

  • -1
    @ 2009-02-19 18:01:04

    我提交了N次,每次都是80~90分,1-2个超时,我就多试了几次...结果,本题通过率↓3%...

信息

ID
1512
难度
6
分类
数据结构 | 树状数组 点击显示
标签
(无)
递交数
2871
已通过
794
通过率
28%
被复制
2
上传者