快读块写求调
  • 板块灌水区
  • 楼主_RON_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/9 14:54
  • 上次更新2024/7/9 15:51:26
查看原帖
快读块写求调
1127258
_RON_楼主2024/7/9 14:54

\rt P6357

#include<bits/stdc++.h>
using namespace std;
int tag[2000001],cnt[2000001][10];
short rrr[250001];
int n,m;
string ansss;
inline int read() {
    int e=0;
    char ch;
    while(1) {
        ch=getchar();
        if(ch==' '||ch=='\n')
            break;
        e=(e<<3)+(e*2)+ch-'0';
    }
    return e;
}
inline void put(int a) {
    string b="";
    while(a) {
        b.push_back((char)(a%10+'0'));
        a/=10;
    }
    int len=b.size();
    for(int i=0;i<len/2;i++) swap(b[i],b[len-i-1]);
    ansss+=b;
    ansss+='\n';
}
inline void make(int i,int l,int r,int x,int y) {
    int a=i*2,b=i*2+1;
    if(l>=x&&r<=y) {
        tag[i]++;
        return;
    }
{
    if(tag[i]==0)
        ; 
    else {
    int c=0;
	tag[a]+=tag[i];
	tag[b]+=tag[i];
    cnt[c][(0+tag[i])%10]=cnt[i][0];
    cnt[c][(1+tag[i])%10]=cnt[i][1];
    cnt[c][(2+tag[i])%10]=cnt[i][2];
    cnt[c][(3+tag[i])%10]=cnt[i][3];
    cnt[c][(4+tag[i])%10]=cnt[i][4];
    cnt[c][(5+tag[i])%10]=cnt[i][5];
    cnt[c][(6+tag[i])%10]=cnt[i][6];
    cnt[c][(7+tag[i])%10]=cnt[i][7];
    cnt[c][(8+tag[i])%10]=cnt[i][8];
    cnt[c][(9+tag[i])%10]=cnt[i][9];
    cnt[i][0]=cnt[c][0];
    cnt[i][1]=cnt[c][1];
    cnt[i][2]=cnt[c][2];
    cnt[i][3]=cnt[c][3];
    cnt[i][4]=cnt[c][4];
    cnt[i][5]=cnt[c][5];
    cnt[i][6]=cnt[c][6];
    cnt[i][7]=cnt[c][7];
    cnt[i][8]=cnt[c][8];
    cnt[i][9]=cnt[c][9];
    tag[i]=0;
    }
}
    int mid=(l+r)>>1;
    if(y>=mid+1)
        make(b,mid+1,r,x,y);
    if(x<=mid)
        make(a,l,mid,x,y);
{
    if(tag[a]==0)
        ;
    else {
    int c=0;
	tag[a*2]+=tag[a];
	tag[a*2+1]+=tag[a];
    cnt[c][(0+tag[a])%10]=cnt[a][0];
    cnt[c][(1+tag[a])%10]=cnt[a][1];
    cnt[c][(2+tag[a])%10]=cnt[a][2];
    cnt[c][(3+tag[a])%10]=cnt[a][3];
    cnt[c][(4+tag[a])%10]=cnt[a][4];
    cnt[c][(5+tag[a])%10]=cnt[a][5];
    cnt[c][(6+tag[a])%10]=cnt[a][6];
    cnt[c][(7+tag[a])%10]=cnt[a][7];
    cnt[c][(8+tag[a])%10]=cnt[a][8];
    cnt[c][(9+tag[a])%10]=cnt[a][9];
    cnt[a][0]=cnt[c][0];
    cnt[a][1]=cnt[c][1];
    cnt[a][2]=cnt[c][2];
    cnt[a][3]=cnt[c][3];
    cnt[a][4]=cnt[c][4];
    cnt[a][5]=cnt[c][5];
    cnt[a][6]=cnt[c][6];
    cnt[a][7]=cnt[c][7];
    cnt[a][8]=cnt[c][8];
    cnt[a][9]=cnt[c][9];
    tag[a]=0;
    }
}
    {
    if(tag[b]==0)
        ;
    else {
    int c=0;
	tag[b*2]+=tag[b];
	tag[b*2+1]+=tag[b];
    cnt[c][(0+tag[b])%10]=cnt[b][0];
    cnt[c][(1+tag[b])%10]=cnt[b][1];
    cnt[c][(2+tag[b])%10]=cnt[b][2];
    cnt[c][(3+tag[b])%10]=cnt[b][3];
    cnt[c][(4+tag[b])%10]=cnt[b][4];
    cnt[c][(5+tag[b])%10]=cnt[b][5];
    cnt[c][(6+tag[b])%10]=cnt[b][6];
    cnt[c][(7+tag[b])%10]=cnt[b][7];
    cnt[c][(8+tag[b])%10]=cnt[b][8];
    cnt[c][(9+tag[b])%10]=cnt[b][9];
    cnt[b][0]=cnt[c][0];
    cnt[b][1]=cnt[c][1];
    cnt[b][2]=cnt[c][2];
    cnt[b][3]=cnt[c][3];
    cnt[b][4]=cnt[c][4];
    cnt[b][5]=cnt[c][5];
    cnt[b][6]=cnt[c][6];
    cnt[b][7]=cnt[c][7];
    cnt[b][8]=cnt[c][8];
    cnt[b][9]=cnt[c][9];
    tag[b]=0;
}}
    cnt[i][1]=cnt[a][1]+cnt[b][1];
    cnt[i][2]=cnt[a][2]+cnt[b][2];
    cnt[i][3]=cnt[a][3]+cnt[b][3];
    cnt[i][4]=cnt[a][4]+cnt[b][4];
    cnt[i][5]=cnt[a][5]+cnt[b][5];
    cnt[i][6]=cnt[a][6]+cnt[b][6];
    cnt[i][7]=cnt[a][7]+cnt[b][7];
    cnt[i][8]=cnt[a][8]+cnt[b][8];
    cnt[i][9]=cnt[a][9]+cnt[b][9];
    cnt[i][0]=cnt[a][0]+cnt[b][0];
}
inline int ans(int i,int l,int r,int x,int y) {
    int a=i*2,b=i*2+1;
    {
    if(tag[i]==0)
        ; 
    else {
    int c=0;
	tag[a]+=tag[i];
	tag[b]+=tag[i];
    cnt[c][(0+tag[i])%10]=cnt[i][0];
    cnt[c][(1+tag[i])%10]=cnt[i][1];
    cnt[c][(2+tag[i])%10]=cnt[i][2];
    cnt[c][(3+tag[i])%10]=cnt[i][3];
    cnt[c][(4+tag[i])%10]=cnt[i][4];
    cnt[c][(5+tag[i])%10]=cnt[i][5];
    cnt[c][(6+tag[i])%10]=cnt[i][6];
    cnt[c][(7+tag[i])%10]=cnt[i][7];
    cnt[c][(8+tag[i])%10]=cnt[i][8];
    cnt[c][(9+tag[i])%10]=cnt[i][9];
    cnt[i][0]=cnt[c][0];
    cnt[i][1]=cnt[c][1];
    cnt[i][2]=cnt[c][2];
    cnt[i][3]=cnt[c][3];
    cnt[i][4]=cnt[c][4];
    cnt[i][5]=cnt[c][5];
    cnt[i][6]=cnt[c][6];
    cnt[i][7]=cnt[c][7];
    cnt[i][8]=cnt[c][8];
    cnt[i][9]=cnt[c][9];
    tag[i]=0;
    }
}
    if(l>=x&&r<=y) {
        int sum=0;
        for(short j=1;j<=9;j++)
            sum+=j*cnt[i][j];
        return sum;
    }
    int sum=0;
    int mid=(l+r)>>1;
    if(y>=mid+1)
        sum+=ans(b,mid+1,r,x,y);
    if(x<=mid)
        sum+=ans(a,l,mid,x,y);
    return sum;
}
inline void build(int i,int l,int r) {
    int a=i*2,b=i*2+1;
    if(l==r) {
        cnt[i][rrr[l]]++;
        return;
    }
    int mid=(l+r)>>1;
    build(i*2,l,mid);
    build(i*2+1,mid+1,r);
    cnt[i][1]=cnt[a][1]+cnt[b][1];
    cnt[i][2]=cnt[a][2]+cnt[b][2];
    cnt[i][3]=cnt[a][3]+cnt[b][3];
    cnt[i][4]=cnt[a][4]+cnt[b][4];
    cnt[i][5]=cnt[a][5]+cnt[b][5];
    cnt[i][6]=cnt[a][6]+cnt[b][6];
    cnt[i][7]=cnt[a][7]+cnt[b][7];
    cnt[i][8]=cnt[a][8]+cnt[b][8];
    cnt[i][9]=cnt[a][9]+cnt[b][9];
    cnt[i][0]=cnt[a][0]+cnt[b][0];
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    n=read(),m=read();
    char ttt;
    for(int i=1;i<=n;i++) {
        ttt=getchar();
        rrr[i]=ttt-'0';
    }
    getchar();
    build(1,1,n);
    while(m--) {
        int l,r;
        l=read();
        if(m==0)
            cin>>r;
        else
            r=read();
        put(ans(1,1,n,l,r));
        make(1,1,n,l,r);
    }
    int len=ansss.size();
    for(int i=0;i<len;i++)
        putchar(ansss[i]);
}

2024/7/9 14:54
加载中...