首页 > 其他 > 详细

分块 HDU 1166

时间:2017-02-24 13:35:15      阅读:144      评论:0      收藏:0      [点我收藏+]

用分块也可以写 

就分成根号n块

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<set>
#include<string>
#include<map>

using namespace std;
typedef long long LL;

#define inf  2000000000
#define MAXN 200010

int num[MAXN];
int en[MAXN];

int main()
{

    int t,ca;
    scanf("%d",&t);
    ca=1;

    while(t--)
    {
        int n;
        scanf("%d",&n);
        int sz=(int)sqrt(1.0*n);
        memset(en,0,sizeof(en));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            int x=i/sz;
            en[x]+=num[i];
        }
        printf("Case %d:\n",ca++);
        while(1)
        {
            char s[10];
            scanf("%s",s);
            if(s[0]==E)
                break;
            int a,b;
            scanf("%d%d",&a,&b);
            if(s[0]==Q)
            {
                int ans=0;

                for(int i=a;i<=b;)
                {
                    int x=i/sz;
                    if(i%sz==0&&i+sz-1<=b)
                    {
                        ans+=en[x];
                        i+=sz;
                    }
                    else
                    {
                        ans+=num[i];
                        i++;
                    }
                }
                printf("%d\n",ans);
            }
            else if(s[0]==A)
            {
                num[a]+=b;
                int x=a/sz;
                en[x]+=b;
            }
            else
            {
                b=-b;
                num[a]+=b;
                int x=a/sz;
                en[x]+=b;
            }
        }
    }
    return 0;
}

 

分块 HDU 1166

原文:http://www.cnblogs.com/cherryMJY/p/6438163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!