zoukankan      html  css  js  c++  java
  • 笔记

    //利用动态数组统计与i相邻的不相等的值;
    //每个值对答案的最大贡献是修改为与其相连的点的中间值; 
    #include<cstdio>
    #include<vector>
    #include<algorithm>
    #define ll long long
    using namespace std;
    int n,m;
    vector<int> f[100001];
    ll ans=0,be,af,zzz,a[100001];
    ll max(ll a,ll b){return a>b?a:b;}
    int cha(ll a,ll b){
        if(a>b) return  (a-b);
        else return (b-a);
    }
    int main(){
        freopen("note.in","r",stdin);
        freopen("note.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++) scanf("%d",a+i);
        for(int i=1;i<=m;i++){
            if(i>1&&a[i]!=a[i-1]) f[a[i-1]].push_back(a[i]);
            if(i<m&&a[i]!=a[i+1]) f[a[i+1]].push_back(a[i]);
        }
        zzz=0;
        for(int i=2;i<=m;i++) zzz+=(ll)cha(a[i],a[i-1]);//修改前所有差值; 
        for(int i=1;i<=n;i++){
            if(!f[i].size()) continue;
            sort(f[i].begin(),f[i].end());
            ll y=f[i][f[i].size()/2];
            be=0,af=0;
            for(int j=0;j<f[i].size();j++){
                be+=(ll)cha(i,f[i][j]);     //累加修改前i和与i相邻的数的差值; 
                af+=(ll)cha(y,f[i][j]);     //修改后 
            }
            ans=max(ans,be-af);             //记录最大差值 
        }
        printf("%I64d
    ",zzz-ans);
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    View Code
  • 相关阅读:
    ? ?? 类?
    类 建索引
    访问局域网计算机文件
    JS 在元素后面添加新的元素
    js 网页加载完毕,执行js函数
    设置快捷键(3种方式)
    winform设置textbox设置水印
    ADO.NET 学生管理
    C#整理 条件语句
    ADO.NET 数据访问类查询、属性扩展
  • 原文地址:https://www.cnblogs.com/qingang/p/6059295.html
Copyright © 2011-2022 走看看