线段树写的 为什么wa了呀
查看原帖
线段树写的 为什么wa了呀
877860
Just_Love_You楼主2023/11/29 19:33
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
#define double long double
using namespace std;
constexpr int N=1e7+10;
constexpr int mod=1e9+7;
int tree[N];
void build(int l,int r,int num)
{
    if(l==r)
    {
        tree[num]=0;
        return;
    }
    int mid=l+(r-l>>1);
    build(l,mid,num<<1);
    build(mid+1,r,num<<1|1);
    return;
}
void update(int l,int r,int num,int x,int y)
{
    if(l<=x&&y<=r)
    {
        tree[num]++;
        return;
    }
    int mid=x+(y-x>>1);
    if(tree[num])
    {
        tree[num<<1]+=tree[num];
        tree[num<<1|1]+=tree[num];
        tree[num]=0;
    }
    if(l<=mid)
    {
        update(l,r,num<<1,x,mid);
    }
    if(r>mid)
    {
        update(l,r,num<<1|1,mid+1,y);
    }
}
int find(int l,int r,int num,int tmp)
{
    if(l==r)
    {
        return tree[num];
    }
    int mid=l+(r-l>>1);
    if(tree[num])
    {
        tree[num<<1]+=tree[num];
        tree[num<<1|1]+=tree[num];
        tree[num]=0;
    }
    if(tmp<=mid)
    {
        return find(l,mid,num<<1,tmp);
    }else
    {
        return find(mid+1,r,num<<1|1,tmp);
    }
}
void solve()
{
    int n,k;
    int o=15;
    cin >> n >> k;
    vector f(n+1,vector<int>(20));
    build(1,n,1);
    for(int i=1;i<=n;i++)
    {
        int num;
        cin >> num;
        f[i][0]=num;
        for(int j=1;j<20;j++)
        {
            int num=f[i][j-1];
            int tmp=0;
            while(num)
            {
                tmp=tmp+num%10;
                num/=10;
            }
            f[i][j]=tmp;
        }
    }
    while(k--)
    {
        int num;
        cin >> num;
        if(num==1)
        {
            int l,r;
            cin >> l >> r;
            update(l,r,1,1,n);
        }else
        {
            int tmp;
            cin >> tmp;
            cout << f[tmp][min(o,find(1,n,1,tmp))] << endl;
        }
    }
}
signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int o;
    cin >> o;
    while(o--)
    solve();
    return 0;
}
//
//⠀⠀⠀             ⠀⢸⣿⣿⣿⠀⣼⣿⣿⣦⡀
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀ ⠀⢸⣿⣿⡟⢰⣿⣿⣿⠟⠁
//⠀⠀⠀⠀⠀⠀⠀⢰⣿⠿⢿⣦⣀⠀⠘⠛⠛⠃⠸⠿⠟⣫⣴⣶⣾⡆
//⠀⠀⠀⠀⠀⠀⠀⠸⣿⡀⠀⠉⢿⣦⡀⠀⠀⠀⠀⠀⠀ ⠛⠿⠿⣿⠃
//⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣦⠀⠀⠹⣿⣶⡾⠛⠛⢷⣦⣄⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧⠀⠀⠈⠉⣀⡀⠀ ⠀⠙⢿⡇
//⠀⠀⠀⠀⠀⠀⢀⣠⣴⡿⠟⠋⠀⠀⢠⣾⠟⠃⠀⠀⠀⢸⣿⡆
//⠀⠀⠀⢀⣠⣶⡿⠛⠉⠀⠀⠀⠀⠀⣾⡇⠀⠀⠀⠀⠀⢸⣿⠇
//⢀⣠⣾⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⢀⣼⣧⣀⠀⠀⠀⢀⣼⠇
//⠈⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⠋⠙⠛⠛⠛⠛⠛⠁
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡿⠋⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⢾⠿⠋⠀
//
2023/11/29 19:33
加载中...