CF540E

Codeforces 301 Div.2 E

题意是说,给一个按大小排序的正整数数列,给出n个对换操作,n<=10^5.问操作后该数列的逆序对对数.

思路跟普通的求逆序对对数思路是一样的,都是利用归并排序,只是原来的数这里用区间代替.应该说还是比较简单的.

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include <bitset>
using namespace std;

#define sqr(x) (x)*(x)

typedef long long ll;

const ll mod=1000000007;

int n;
map<int,int> ma;
map<int,int>::iterator ite;
ll r=0;

struct inter
{
    int x,y;
    inter(int x=0,int y=0):x(x),y(y){}
};
bool operator <(inter a,inter b)
{
    return a.x<b.x;
}

inter p[1000005];

inter te[1000005];

void mergesort(int st,int en)//[st,en)
{
    if(en-st<=1) return;
    int mid=(st+en)/2;
    mergesort(st,mid);mergesort(mid,en);
    int i,j,tn;
    ll le=0;
    for(i=st;i<mid;i++) le=le+(p[i].y-p[i].x+1);
    i=st,j=mid,tn=0;
    while(i<mid&&j<en)
    {
        if(p[i]<p[j])
        {
            te[tn++]=p[i];
            le-=(p[i].y-p[i].x+1);
            ++i;
        }
        else
        {
            te[tn++]=p[j];
            r=r+le*(p[j].y-p[j].x+1);
            ++j;
        }
    }
    while(i<mid)
    {
        te[tn++]=p[i];++i;
    }
    while(j<en)
    {
        te[tn++]=p[j];++j;
    }
    for(i=st;i<en;i++) p[i]=te[i-st];
}

int main()
{
    int i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        int x,y,xx,yy;
        scanf("%d %d",&x,&y);
        if(ma.find(x)!=ma.end()) xx=ma[x];
        else xx=x;
        if(ma.find(y)!=ma.end()) yy=ma[y];
        else yy=y;
        ma[x]=yy;ma[y]=xx;
        if(x==yy) ma.erase(x);
        if(y==xx) ma.erase(y);
    }
    n=0;
    int cur=1;
    for(ite=ma.begin();ite!=ma.end();ite++)
    {
        if(ite->first>cur) p[n++]=inter(cur,(ite->first)-1);
        p[n++]=inter(ite->second,ite->second);
        cur=ite->first+1;
    }
    mergesort(0,n);
    printf("%I64d\n",r);
    return 0;
}


{"code":200,"msg":"\u6210\u529f","data":{"web_name":"\u5b89\u5168\u8bbf\u95ee","is_close":"1","is_reg":"1","web_poundage":"0","day_cash":"1","live_num":"5","pay_choose":"1000|5000|10000|50000|100000","order_min_price":"100","order_max_price":"99999999999999999","reg_par":"1","cash_min":"100","cash_max":"1000000","cash_day_max":"50000000","is_cash":"1","msm_SignName":"\u4e2d\u6cf0\u56fd\u9645","msm_appkey":"\u77ed\u4fe1\u5b9d\u7528\u6237\u540d","msm_secretkey":"\u77ed\u4fe1\u5b9d\u5bc6\u7801","msm_TCode":"","allot_point":"100","yongjin_point":"10","reg_type":"1","kong_end":"8-12","userpay_max":"5000000","userpay_min":"100","max_order_count":"20","web_logo":"https:\/\/565755.azureedge.net\/public\/jpg\/1750263514.png","sys_kefu":"https:\/\/gtja166.azureedge.net\/cha.html","reg_push":"1000|5000|10000|50000|100000","can_kong":"1151,1152","role_ks":"10:00","role_js":"21:59","sys_limit":"0","sys_luhn_card":"0","sys_app_url":"sdsfsdfs","sys_truename":"1","sys_mobile":"0","sys_invit":"0","sys_rates":"1","sys_jifen":"0","sys_pingcang":"1","sys_reg_caijin":"0","sys_log_caijin":"0","sys_homepage":"1","sys_kefu_name":"\u5c0f\u7f8e","sys_kefu_img":"\/public\/jpg\/kefu_img.png","sys_greeting":"\u60a8\u597d\uff0c\u8bf7\u95ee\u6709\u4ec0\u4e48\u9700\u8981\u5e2e\u52a9\u7684~~","sys_buy_once":"0","sys_hide_yingkui":"0","sys_robot":"0","sys_yue_benjin":"0","config":"\u6e29\u99a8\u63d0\u793a:\u5229\u606f\u5b9d\u9879\u76ee\u662f\u56fa\u5b9a\u6027\u5468\u671f\uff0c\u4ea7\u54c1\u5206\u4e3a1,3,5,7,9,15,30,180\u5929\uff0c\u4e70\u5165\u5229\u606f\u5b9d\u4e0d\u5f71\u54cd\u4e0b\u5355\u8d2d\u4e70\uff0c \u8d2d\u4e70\u5229\u606f\u4ea7\u54c1\u5c06\u4ece\u60a8\u7684\u7528\u6237\u4f59\u989d\u5b9a\u5b58\uff0c\u5b58\u5165\u5229\u606f\u5b9d\u9879\u76ee\uff0c\u6bcf\u4e00\u7b14\u5b9a\u671f\u50a8\u84c4\u4f1a\u5728\u65f6\u95f4\u5230\u671f\u540e\u81ea\u52a8\u7ed3\u7b97\uff0c\u4e70\u5165\u5229\u606f\u5b9d\u4e0d\u5f71\u54cd\u4e0b\u5355\u8d2d\u4e70\u3002","theme":"mobile","app_show":"0","app_url":"https:\/\/9852.azureedge.net\/","card_reset":"1","online":"878925","login_page":"3","risk_control":"0","personal_edit":"1","welcome_text":"\u56fd\u6cf0\u541b\u5b89\u8bc1\u5238\u80a1\u4efd\u6709\u9650\u516c\u53f8 \uff0c\u4e8e1999\u5e748\u670818\u65e5\u5408\u5e76\u8bbe\u7acb\uff0c\u662f\u4e2d\u56fd\u8bc1\u5238\u884c\u4e1a\u957f\u671f\u3001\u6301\u7eed\u3001\u5168\u9762\u9886\u5148\u7684\u7efc\u5408\u91d1\u878d\u670d\u52a1\u5546\u3002\u56fd\u6cf0\u541b\u5b89\u8de8\u8d8a\u4e86\u4e2d\u56fd\u8d44\u672c\u5e02\u573a\u53d1\u5c55\u7684\u5168\u90e8\u5386\u7a0b\u548c\u591a\u4e2a\u5468\u671f\uff0c\u59cb\u7ec8\u4ee5\u5ba2\u6237\u4e3a\u4e2d\u5fc3\uff0c\u6df1\u8015\u4e2d\u56fd\u5e02\u573a\uff0c\u4e3a\u4e2a\u4eba\u548c\u673a\u6784\u5ba2\u6237\u63d0\u4f9b\u5404\u7c7b\u91d1\u878d\u670d\u52a1\uff0c\u786e\u7acb\u4e86\u5168\u65b9\u4f4d\u7684\u884c\u4e1a\u9886\u5148\u5730\u4f4d\u30022011\u52302018\u5e74\uff0c\u56fd\u6cf0\u541b\u5b89\u8425\u4e1a\u6536\u5165\u8fde\u7eed\u516b\u5e74\u540d\u5217\u884c\u4e1a\u524d\u4e09\u3002","hot_product":"23","recommend_product":"23","bankcard_id":"0","register_id":"1","take_limit":"0","denyip":"6.3.2.1","is_activity":"1","sys_shiming":"0","sys_score":"1"}} 翻译一下
08-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值