5月月赛(* ̄︿ ̄)

# 啊啊啊啊啊我讨厌月赛

第一题:30分

很裸的快速幂,结果考的时候成功的把\(k={10^{10^{9}}}\)看成了\(k^{10^9}\),脑子一抽以为可以用long long
然后就完美的溢出+\(\color {red}{WA}了\)
其实即使看到了我也不会,我忘记了怎么打快速幂了_(:з」∠)_
神奇的快速幂
---

第二题:20分

20分,我记得我是只写了lis的基本,没写改编得的_(:з」∠)_
我很完美的想到了0的位置完全可以算出前后的大小差距,然后看能用差距补多少个0
然后我不会了
\(\color {lightblue}{艹}\)
后来看std,凑这不是我的想法吗
\(\huge {完了}\),果然是我太蔡了,正解我都想出来了我居然不会写
我觉得挺好的一篇关于lower_bound的解释
---

第三题

区间查询,第一时间反应就是线段树(啊啊啊啊std就是线段树然而最可怕的是我忘记线段树了我曾经会的啊啊啊)
那.....我贴个我曾经的\(\color {blue}{线段树}\)模板在这里好了_(:з」∠)_

#include<iostream>
#include<cstring>

#define lson (o<<1)
#define rson ((o<<1)|1)

typedef long long ll;

using namespace std;
struct node{
    ll sum;
    ll lazyTag;
}t[400010];
ll n,m;
ll a[400010];

/*void build(int o,int l,int r);
void pushUp(int o);
void pushDown(int o,int l,int r);
void modify(int o,int l,int r,int ql,int qr,int k);
void update(int l,int r,int ql,int qr,int k);
void f(int o,int l,int r,int k);
int query(int o,int l,int r,int ql,int qr);*/
void f(ll o,ll l,ll r,ll k)
{
    t[o].lazyTag+=k;
    t[o].sum+=k*(r-l+1);
}
void pushUp(ll o)
{
    t[o].sum=t[lson].sum+t[rson].sum;//sum
//    cout<<o<<" "<<t[o].sum<<endl;
}

void pushDown(ll o,ll l,ll r)
{
    ll mid=(l+r)>>1;

    f(lson,l,mid,t[o].lazyTag);//左
    f(rson,mid+1,r,t[o].lazyTag);//右

    t[o].lazyTag=0;//标记清零
}

void build(ll o,ll l,ll r)
{
    if(l==r)
    {
        t[o].sum=a[l];
        return;
    }
    ll mid=(l+r)>>1;
    build(lson,l,mid);
    build(rson,mid+1,r);
    pushUp(o);
}


void modify(ll o,ll l,ll r,ll ql,ll qr,ll k)
{
    if(ql<=l&&r<=qr)//如果在区间内
    {
        f(o,l,r,k);
        return;
    }
    pushDown(o,l,r);
    ll mid=(l+r)>>1;
    if(ql<=mid)
        modify(lson,l,mid,ql,qr,k);
    if(mid<qr)
        modify(rson,mid+1,r,ql,qr,k);
    pushUp(o);
}



ll query(ll o,ll l,ll r,ll ql,ll qr)
{
    ll res=0;
    if(ql<=l&&r<=qr)
        return t[o].sum;
    ll mid=(l+r)>>1;
    pushDown(o,l,r);
    if(ql<=mid)
        res+=query(lson,l,mid,ql,qr);
    if(mid<qr)
        res+=query(rson,mid+1,r,ql,qr);
    return res;
}

int main()
{
    cin>>n;
    cin>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int t;
    ll x,y,k;
    build(1,1,n);
    for(int i=1;i<=m;i++)
    {
        cin>>t;
        switch(t)
        {
            case 1:
                cin>>x>>y>>k;
                modify(1,1,n,x,y,k);
                break;

            case 2:
                cin>>x>>y;
                cout<<query(1,1,n,x,y)<<endl;
                break;

        }
    }
    return 0;
}

\(\huge {真的完了}\)
1516111-20190522171931553-1395212312.png

转载于:https://www.cnblogs.com/ComputerEngine/p/10907126.html

void welcome() { printf("**********欢迎使用管理系统*************\n"); //以不同的角色进行登录系统 printf("1.管理员身份登录\n"); printf("2.普通用户学生登录\n"); printf("3.退出\n"); printf("******************************************\n"); } //管理员的菜单界面 void mangeview() { printf("**********欢迎管理员登录********\n"); printf("-----------------1.注册学生信息------------------\n"); printf("-----------------2.输出学生信息------------------\n"); printf("-----------------3.删除学生信息------------------\n"); printf("-----------------4.修改学生信息------------------\n"); printf("-----------------5.查询学生信息------------------\n"); printf("-----------------6.学生请假和补卡------------------\n"); printf("-----------------7.排序(姓名、学号、打卡次数)--\n"); printf("-----------------8.考勤数据统计------------------\n"); printf("-----------------9.返回------o( ̄ヘ ̄o#)----\n"); //........ printf("********************************\n"); } //普通用户界面 //普通用户界面提示 void comuser(){ printf("************欢迎学生登录************\n"); printf("-----------------1.录入学生信息------------------\n"); printf("-----------------2.输出学生信息------------------\n"); printf("-----------------3.查询学生信息------------------\n"); printf("-----------------4.排序(姓名、学号、打卡次数)--\n"); printf("-----------------5.学生请假和补卡------------------\n"); printf("-----------------6.返回------o( ̄ヘ ̄o#)----\n"); printf("********************************************\n"); } 这个代码怎么描述,运用了什么函数
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值