每周不定期刷题 第一天

每周不定期刷题规则:

1.题目:5道选择题(CSP真题)+2道编程题(洛谷原题)φ(゜▽゜*)♪

2.认真做题,限时40分钟,不允许抄答案🧡

选择题

1. 在数据压缩编码中的哈夫曼编码方法,在本质是一种()的策略。

A. 枚举

B. 贪心

C. 递归

D. 动态规划

2. 若某算法的计算时间表示为递推关系式: T(N) = 2T(N / 2) + N log N T(1) = 1 则该算法的时间复杂度为( )。

A. O(N)

B. O(N log N)

C. O(N\log_{2}N)

D. O(N^{2})

3.链表不具有的特点是()

A.插入删除不需要移动元素

B.不必事先估计存储空间

C.所需空间与线性表长度成正比

D.可随机访问任一元素

4.将(2, 6, 10, 17)分别存储到某个地址区间为 0~10 的哈希表中,如果哈希函数 h(x) = ( ),将不会产生冲突,其中 a mod b 表示 a 除以 b 的余数。

A. x mod 11

B. x 2 mod 11

C. 2x mod 11

D. ⌊根号x⌋ mod 11,其中⌊根号x ⌋表示 根号x下取整

5.摩尔定律(Moore's law)是由英特尔创始人之一戈登·摩尔(Gordon Moore)提 出来的。根据摩尔定律,在过去几十年以及在可预测的未来几年,单块集成电路的集成度大 约每( )个月翻一番。

A. 1

B. 6

C. 18

D. 36

答案

BCDCC

编程题

1.https://www.luogu.com.cn/problem/P1908

2.P3374 【模板】树状数组 1 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

答案

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int tree[500010],ranks[500010],n;
long long ans; 
struct point
{
    int num,val;
}a[500010];
inline bool cmp(point q,point w)
{
    if(q.val==w.val)
        return q.num<w.num;
    return q.val<w.val;
}
inline void insert(int p,int d)
{
    for(;p<=n;p+=p&-p)
        tree[p]+=d; 
}
inline int query(int p)
{
    int sum=0;
    for(;p;p-=p&-p)
        sum+=tree[p];
    return sum;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i].val),a[i].num=i;
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++)
        ranks[a[i].num]=i;
    for(int i=1;i<=n;i++)
    {
        insert(ranks[i],1);
        ans+=i-query(ranks[i]);
    }
    printf("%lld",ans);
    return 0;
}
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
int n,m,tree[2000010];
int lowbit(int k)
{
    return k & -k;
}
void add(int x,int k)
{
    while(x<=n)
    {
        tree[x]+=k;
        x+=lowbit(x);
    }
}
int sum(int x)
{
        int ans=0;
    while(x!=0)
    {
        ans+=tree[x];
        x-=lowbit(x);
    }
    return ans;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int a;
        scanf("%d",&a);
        add(i,a);
    }
    for(int i=1;i<=m;i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(a==1)
            add(b,c);
        if(a==2)
            cout<<sum(c)-sum(b-1)<<endl;
    }
}

大家点个赞关个注呗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值