AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 商店
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

P1198 [JSOI2008] 最大数



1


题目链接 P1198 [JSOI2008] 最大数

又又又懵了。。。。。。
哪位大神帮忙解决下,哪里的问题。。。。。。

错误的代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long intt;
intt m,p;
struct node{
    intt l,r;
    intt num;
}c[800080];
void build_the_tree(intt i,intt l,intt r){
    c[i].l=l;
    c[i].r=r;
    c[i].num=0;
    if(l==r){
        return ;
    }
    intt mid=(l+r)>>1;
    build_the_tree(i*2,l,mid);
    build_the_tree(i*2+1,mid+1,r);
}
void add(intt i,intt x,intt z){
    if(c[i].l==x&&c[i].r==x){
        c[i].num=z;
        return ;    
    }
    intt mid=(c[i].l+c[i].r)>>1;
    if(x<=mid){
        add(i*2,x,z);
    }else{
        add(i*2+1,x,z);
    }
    c[i].num=max(c[i*2].num,c[i*2+1].num);
}
intt ask_the_answer(intt i,intt l,intt r){
    intt ans=-0x3f3f3f3f3f3f3f3f;
    if(c[i].l>=l&&c[i].r<=r){
        return c[i].num;
    }
    intt mid=(c[i].l+c[i].r)>>1;
    if(l<=mid){
        ans=max(ans,ask_the_answer(i*2,l,r));
    }
    if(r>mid){
        ans=max(ans,ask_the_answer(i*2+1,l,r));
    }
    return ans;
}
int main(){
    scanf("%lld%lld",&m,&p);
    build_the_tree(1,1,m);
    char s,huanhang;
    intt a,sum=0,lastnum=0;
    for(int i=1;i<=m;i++){
        scanf("%c%c%lld",&huanhang,&s,&a);
        if(s=='A'){ 
            sum++;
            a=(a+lastnum)%p;    
            add(1,sum,a);
        }else{
            lastnum=ask_the_answer(1,sum-a+1,sum);
            printf("%lld\n",lastnum);
        }
    }
    return 0;
}
线段树模版

提问于12天前
wert_nzy
69


1 个问答



1

读取输入的时候,读char用’%s’比较好,’%c’经常有问题,

改一下就可以AC:

int main()
{
    ...
    char s[2];
    ...

        scanf("%s%lld",&s,&a);
        if(*s=='A') {
    ...
}

回答于12天前
houghstc
39069

非常感谢,真没想到是这里的问题,学到了。 –  wert_nzy   12天前


我来回答
你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息