zoukankan      html  css  js  c++  java
  • 【BZOJ3211&3038】花神游历各国&上帝造题的七分钟2(CodeVS)

    Description

     

    Input

     

    Output

    每次x=1时,每行一个整数,表示这次旅行的开心度

    Sample Input

    4

    1 100 5 5

    5

    1 1 2

    2 1 2

    1 1 2

    2 2 3

    1 1 4

    Sample Output

    101

    11

    11

    HINT

    对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9


    Source

    SPOJ2713 gss4 数据已加强

    思路:线段树并不能区间开方,但直接暴力修改是会超时的,只要加入一点点优化:若是该区间值为0||1那么就不必再修改了,注意也需要左右子树得出父节点。

    上帝造题的七分钟2:不保证l<r,然后再加上读入和输出优化,还有开!long!long!少开long long 弄得我百思不得其解。

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #define MAXN 100000
    using namespace std;
    long long lazy[MAXN*5],a[MAXN],b[MAXN*5];
    long long segtree[MAXN*5];
    int n,m;
    long long  getin()
    {
        char ch = getchar(); 
        long long  data = 0; 
        while (ch < '0' || ch > '9') 
            ch = getchar(); 
        do 
        { 
            data = data*10 + ch-'0'; 
            ch = getchar(); 
        } while (ch >= '0' && ch <= '9'); 
        return data; 
    }
    void putout(long long t){
        long long  ans[40]={0},i=0;
        for(;t;t/=10)    ans[++i]=t%10;
        for(;i;i--)    putchar('0'+ans[i]);
        putchar('
    ');
    }
    void adddata(int now)
    {
        segtree[now]=segtree[(now<<1)]+segtree[(now<<1)+1];
    }
    void buildtree(int now,int l,int r)
    {
        if (l==r)    {segtree[now]=a[l];        if (segtree[now]==1 || segtree[now]==0)    b[now]=1; return;}
        int mid=(l+r)>>1;
        buildtree((now<<1),l,mid);
        buildtree((now<<1)+1,mid+1,r);
        adddata(now);
        b[now]=b[(now<<1)]&b[(now<<1)+1];
    }
    long long query(int now,int l,int r,int begin,int end)
    {
        if (begin<=l && end>=r)    return     segtree[now];
        long long mid=(l+r)>>1,ans=0;
        if (begin<=mid)    ans+=query((now<<1),l,mid,begin,end);
        if (end>mid)    ans+=query((now<<1)+1,mid+1,r,begin,end);
        return ans;
    }
    void intchange(int now,int l,int r,int begin,int end)
    {
        if (b[now]==1)    return;
        if (l==r)    {segtree[now]=floor(sqrt(segtree[now]));    if (segtree[now]==1 || segtree[now]==0)    b[now]=1;    return;}
        int mid=(l+r)>>1;
        if (begin<=mid)    intchange((now<<1),l,mid,begin,end);
        if (end>mid)    intchange((now<<1)+1,mid+1,r,begin,end);
        adddata(now);
        b[now]=b[(now<<1)]&b[(now<<1)+1];
    }
    int main()
    {
        int i;
        long long  x,y,z;
        n=getin();
        for (i=1;i<=n;i++)    a[i]=getin();
        buildtree(1,1,n);
        m=getin();
        for (i=1;i<=m;i++)
        {
            x=getin();
            y=getin();
            z=getin();
            if (y>z)    swap(y,z);
            if (x==1)    putout(query(1,1,n,y,z));
            else    intchange(1,1,n,y,z);
        }
        return 0;
    }
    —Anime Otaku Save The World.
  • 相关阅读:
    XCode颜色显示插件
    Xcode4的color theme保存路径
    Direct2D教程(四)Path Geometry
    Direct2D教程(六)图形也能做运算
    Direct2D教程(五)复合图形
    Direct2D教程(七)单色画刷
    Direct2D QuickStart
    Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?
    Direct2D入门
    Texture
  • 原文地址:https://www.cnblogs.com/DMoon/p/5106091.html
Copyright © 2011-2022 走看看