【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(‘\n‘);
}
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;
}
时间: 2024-10-16 17:44:56

【BZOJ3211&3038】花神游历各国&上帝造题的七分钟2(CodeVS)的相关文章

BZOJ 3038 上帝造题的七分钟2 (并查集+树状数组)

题解:同 BZOJ 3211 花神游历各国,需要注意的是需要开long long,还有左右节点需要注意一下. #include <cstdio> #include <cmath> #include <iostream> #include <algorithm> using namespace std; typedef long long LL; LL a[100005],c[100005]; int f[100005],n,m,op,l,r,t; int s

3038: 上帝造题的七分钟2 [线段树 暴力]

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1210  Solved: 536[Submit][Status][Discuss] Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部."第一分钟,X说,要有数列,于是便给定了一个正整数数列.第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作.第三分钟,k说,要能查询,于是便有了求一段数的和的操作.第四分

3038: 上帝造题的七分钟2

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 662  Solved: 302[Submit][Status] Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部."第一分钟,X说,要有数列,于是便给定了一个正整数数列.第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作.第三分钟,k说,要能查询,于是便有了求一段数的和的操作.第四分钟,彩虹喵说,要是n

bzoj 3038: 上帝造题的七分钟2 线段树||hdu 4027

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1066  Solved: 476[Submit][Status][Discuss] Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部."第一分钟,X说,要有数列,于是便给定了一个正整数数列.第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作.第三分钟,k说,要能查询,于是便有了求一段数的和的操作.第四分

BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1469  Solved: 631[Submit][Status][Discuss] Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段数的和的操作.

【BZOJ3038】【Codevs2492】上帝造题的七分钟2

喜闻乐见双倍经验 2492 上帝造题的七分钟 2 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段数的和的操作. 第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围. 第五分

BZOJ3038: 上帝造题的七分钟2

3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1715  Solved: 728[Submit][Status][Discuss] Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作. 第三分钟,k说,要能查询,于是便有了求一段数的和的操作.

BZOJ 3132: 上帝造题的七分钟( 二维BIT )

二维树状数组... 自己YY一下再推一下应该可以搞出来... ---------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ; i <

Bzoj3038 上帝造题的七分钟2 并查集

Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1135  Solved: 509 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部."第一分钟,X说,要有数列,于是便给定了一个正整数数列.第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作.第三分钟,k说,要能查询,于是便有了求一段数的和的操作.第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围.第五分钟,诗人说,要有韵律,于