hdu 4027 Can you answer these queries? 线段树+sqrt的特性暴力修改

又傻逼又毒瘤

我还卡了这么久

说明我也又傻逼又毒瘤

#注意每个case后面要有一行空格;

#注意sum会爆int,所以无论是数组还是函数还是输出时,都要开longlong

#为什么可以直接暴力修改?sqrt是个神奇操作,无论多大的数,在很有限的次数里都会开到1,总的修改次数不会很多

#判断该区间是否已经全都不用改了的条件是sum==r-l+1,说明都是1了

#建树的时候可以边建边读入,肯定是合法的

--

复制代码
#include <iostream>
#include <math.h>
#include <string.h>
#include <vector>
#include <map>
#include <queue>
#include <stdio.h>
#include <algorithm>
#include <cstdio>
using namespace std;
long long sum[500000];
void build(int rt,int l,int r)
{
    if(l==r)
    {   scanf("%lld",&sum[rt]);
        return;
    }
    if(l<r)
    {
        int mid=(l+r)>>1;
        build(rt<<1,l,mid);
        build(rt*2+1,mid+1,r);
        sum[rt]=sum[rt<<1]+sum[rt*2+1];
    }
}
void update(int rt,int ul,int ur,int l,int r)
{
    if(sum[rt]==r-l+1)
    {
        return;
    }
    if(l==r)
    {
        sum[rt]=(long long)sqrt(double(sum[rt]));
        return;
    }
    int mid=(l+r)>>1;
    if(ul<=mid)
    {
        update(rt<<1,ul,ur,l,mid);
    }
    if(ur>mid)
    {
        update(rt*2+1,ul,ur,mid+1,r);
    }
    sum[rt]=sum[rt<<1]+sum[rt*2+1];
}
long long  query(int rt,int ql,int qr,int l,int r)
{
    
   if(l>=ql&&r<=qr)
   {
       return sum[rt];
   }
   int mid=(l+r)>>1;
   long long ans=0;
   if(ql<=mid)
   {
       ans+=query(rt<<1,ql,qr,l,mid);
   }
   if(qr>mid)
   {
       ans+=query(rt*2+1,ql,qr,mid+1,r);
   }
   return ans;
}
int main( )
{
  int t,m,cnt=0;
  
  //freopen("lys.in","r",stdin);
  
  while(cin>>t)
  { cnt++;
    printf("Case #%d:\n",cnt);
    
      memset(sum,0,sizeof(sum));
      
      build(1,1,t);
      
    cin>>m;
    for(int j=1;j<=m;j++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        
        if(b>c) swap(b,c);
        
        if(a==0)
        {
            update(1,b,c,1,t);
        }
        else {
            printf("%lld\n",query(1,b,c,1,t));
        }
    }
    printf("\n");
  }
}
复制代码

 

posted @   liyishui  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示