头像

anji

杰诺斯:老师,我现在变强了吗!?




在线 


最近来访(23)
用户头像
空釉璃
用户头像
鲸与海_2
用户头像
我是sun
用户头像
yufei
用户头像
董政
用户头像
元气少女郭德纲2333
用户头像
acwing_34798
用户头像
Travis_0
用户头像
zeng9999jian
用户头像
钢铁加鲁鲁
用户头像
123456...
用户头像
aaac404
用户头像
lyh183
用户头像
Dimly_dust
用户头像
朱柏霖
用户头像
灭却丶退役府---海绵宝宝
用户头像
张大壮
用户头像
acwhr
用户头像
小橘子鸭
用户头像
cht

活动打卡代码 AcWing 802. 区间和

anji
21分钟前
#include <cstdio>
#include <algorithm>
using namespace std;
const int N  = 1e5+10;

int n,m;
int x[N],c[N];
int l[N],r[N];

const int M = 3*N+1;
int a[M],s[M];

int v[M];

int uniq(int v[], int l, int r) {
    int j = l;
    for (int i=l; i<=r;i++) {
        if (i==l||v[i]!=v[i-1]) {
            v[j] = v[i];
            j++;
        }
    }
    return j;
}

int find(int v[], int l, int r, int k) {
    while(l<r) {
        int mid = l+(r-l)/2;
        if (v[mid]>=k) r = mid;
        else l = mid +1;
    }
    return l;
}

int main() {
    // 读取输入
    scanf("%d%d",&n,&m);
    for (int i =0; i<n;i++) 
        scanf("%d%d",&x[i],&c[i]);
    for (int i=0; i<m;i++)
        scanf("%d%d",&l[i],&r[i]);
    // 被离散的数组
    int len = n+2*m;
    for (int i =0; i<n;i++)
        v[i] = x[i];
    for (int i=0;i<m;i++) {
        v[n+i*2] = l[i];
        v[n+i*2+1] = r[i];
    }

    // 生成离散化数组 (排序,去重),编写find函数 log(n) 的查询复杂度
    sort(v, v+len);
    int k = uniq(v, 0, len-1);

    // 准备坐标上的数,求前缀和  映射到a[1..M] 之间
    for (int i=0;i<n;i++){
        int j = find(v,0, k-1, x[i]);
        a[j+1] += c[i];
    }
    for (int i=1; i<=k;i++) {
        s[i] = s[i-1]+a[i];
    }
    // 查询每个l r对应离散化坐标,l 到 r的区间和
    for (int i=0;i<m;i++) {
        int l1 = find(v,0,k-1,l[i])+1;
        int r1 = find(v,0,k-1,r[i])+1;
        printf("%d\n",s[r1]-s[l1-1]);
    }
    return 0;
}



anji
7小时前
#include <iostream>
using namespace std;
const int N = 1e5+10;
int n;
int main() {
    scanf("%d",&n);
    while(n--) {
        int x;
        scanf("%d",&x);
        int cnt = 0;
        while(x>0) {
            if (x&1) cnt++;
            x >>= 1;
        }
        printf("%d ",cnt);
    }
}


活动打卡代码 AcWing 2816. 判断子序列

anji
7小时前
#include <iostream>
using namespace std;
const int N = 1e5+10;
int a[N],b[N];
int n,m;
int main() {
    scanf("%d%d",&n,&m);
    for (int i = 0; i<n;i++) scanf("%d",&a[i]);
    for (int i= 0; i<m; i++) scanf("%d",&b[i]);

    int i = 0, j= 0;
    for ( ; j < m; j++) {
        if (i<n && a[i] == b[j]) i++;
    }
    if (i==n) printf("Yes");
    else printf("No");
    return 0;
}
#include <iostream>
using namespace std;
const int N = 1e5+10;
int a[N],b[N];
int n,m;
int main() {
    scanf("%d%d",&n,&m);
    for (int i = 0; i<n;i++) scanf("%d",&a[i]);
    for (int i= 0; i<m; i++) scanf("%d",&b[i]);

    bool flag = true;
    for (int i = 0, j= 0; i < n ; i++) {
        while(j < m && b[j] != a[i]) j++;
        if (j >= m) {
            flag = false;
            break;
        } else {
            j++;
        }
    }
    if (flag) printf("Yes");
    else printf("No");
    return 0;
}



anji
9小时前
#include <iostream>
#include <cmath>
using namespace std;

const int N = 1e5+10;
int a[N];
int s[N];
int n;
int main() {
    scanf("%d",&n);
    for (int i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }
    int ans = -1;
    for (int i=0,j=0; i<n;i++) {
        s[a[i]]++;
        while(j<=i && s[a[i]] > 1) {
            s[a[j]]--;
            j++;
        }
        ans = max(ans, i-j+1);
    }
    printf("%d",ans);
    return 0;
}



anji
9小时前
#include <iostream>
using namespace std;
const int N = 1e5+10;
int a[N],b[N];
int m,n,x;
int main() {
    scanf("%d%d%d",&n,&m,&x);
    for (int i = 0; i<n ;i++) scanf("%d",&a[i]);
    for (int i = 0; i<m ;i++) scanf("%d",&b[i]);
    for (int i = 0,j=m-1; i<n; i++) {
        while(j>0 && a[i]+b[j] > x) j--;
        if (a[i]+b[j] == x) {
            printf("%d %d",i, j);
            return 0;
        }
    }
    return 0;
}


活动打卡代码 AcWing 798. 差分矩阵

anji
4天前
#include <cstdio>
const int N = 1005;
int n,m,q;
int a[N][N],b[N][N];

void insert(int x1, int y1, int x2, int y2, int c) {
    b[x1][y1]+=c;
    b[x2+1][y1]-=c;
    b[x1][y2+1]-=c;
    b[x2+1][y2+1]+=c;

}

int main() {
    scanf("%d%d%d",&n,&m,&q);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);

    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++) 
            insert(i,j,i,j,a[i][j]);
    while(q--) {
        int x1,y1,x2,y2,c;
        scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&c);
        insert(x1, y1,x2,y2,c);
    }

    for (int i=1;i<=n;i++) {
        for (int j=1;j<=m;j++){
            b[i][j] += b[i-1][j]+b[i][j-1]-b[i-1][j-1];
            printf("%d ", b[i][j]);
        }
        printf("\n");
    }
    return 0;

}


活动打卡代码 AcWing 797. 差分

anji
4天前
#include <cstdio>
const int N = 1e5+5;
int n,m;
int a[N],b[N];

void insert(int l, int r, int c) {

    b[l] += c;
    b[r+1] -=c;
}
int main() {
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
        scanf("%d",&a[i]);

    for (int i=1; i<=n;i++)
        insert(i, i, a[i]);

    while(m--) {
        int l,r,c;
        scanf("%d%d%d",&l,&r,&c);
        insert(l,r,c);
    }

    for (int i=1;i<=n;i++) {
        b[i] += b[i-1];
        printf("%d ", b[i]);
    }
    return 0;
}


活动打卡代码 AcWing 796. 子矩阵的和

anji
4天前
#include <iostream>
using namespace std;
const int N = 1005;
int n,m,q;
int a[N][N],b[N][N];
int main() {
    scanf("%d%d%d", &n,&m,&q);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            b[i][j] = b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];
    while(q--) {
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        int v = b[x2][y2]-b[x2][y1-1]-b[x1-1][y2]+b[x1-1][y1-1];
        printf("%d\n",v);
    }
    return 0;
}


活动打卡代码 AcWing 795. 前缀和

anji
4天前
#include <iostream>
using namespace std;
const int N = 1e5;
int n,m;
int a[N],b[N];

int main() {
    scanf("%d%d",&n,&m);
    for (int i=1; i<=n;i++) scanf("%d",&a[i]);
    for (int i=1; i<=n;i++) b[i] = a[i]+b[i-1];

    while(m--) {
        int l,r;
        scanf("%d%d",&l,&r);
        printf("%d\n",b[r]-b[l-1]);
    }
    return 0;
}


活动打卡代码 AcWing 794. 高精度除法

anji
4天前
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> div(vector<int>& a, int b, int &t) {
    vector<int> c;
    t = 0;
    for (int i=a.size()-1; i>=0;i--) {
        t=t*10+a[i];
        c.push_back(t/b);
        t = t%b;
    }
    reverse(c.begin(),c.end());
    while(c.size()>1&&c.back()==0) c.pop_back();
    return c;
}

int main() {
    string s;  cin >> s;
    int b; cin >> b;
    vector<int> a;
    for (int i=s.size()-1;i>=0;i--) a.push_back(s[i]-'0');
    int t = 0;
    vector<int> c = div(a,b, t);
    for (int i = c.size()-1;i>=0;i--)
        cout << c[i];
    cout << endl;
    cout << t << endl;
    return 0;
}