设为首页 收藏本站
查看: 1364|回复: 0

[经验分享] codechef Chef and Swaps

[复制链接]

尚未签到

发表于 2015-11-25 15:57:21 | 显示全部楼层 |阅读模式
Problem Description
  

This time, Chef has given you an array A containing N elements.

He had also asked you to answer M of his questions. Each question sounds like: "How many inversions will the array A contain, if we swap the elements at the i-th and the j-th positions?".

The inversion is such a pair of integers (i, j) that i < j and Ai > Aj.



Input



The first line contains two integers N and M - the number of integers in the array A and the number of questions respectively.

The second line contains N space-separated integers - A1, A2, ..., AN, respectively.

Each of next M lines describes a question by two integers i and j - the 1-based indices of the numbers we'd like to swap in this question.


Output



Output M lines. Output the answer to the i-th question of the i-th line.




Constraints

1 ≤ N, M ≤ 2 * 105

1 ≤ i, j ≤ N

1 ≤ Ai ≤ 109

Mind that we don't actually swap the elements, we only answer &quot;what if&quot; questions, so the array doesn't change after the question.




Example

Input:

6 3

1 4 3 3 2 5

1 1

1 3

2 5


Output:

5

6

0




Explanation



Inversions for the first case: (2, 3), (2, 4), (2, 5), (3, 5), (4, 5).

Inversions for the second case: (1, 3), (1, 5), (2, 3), (2, 4), (2,5), (4, 5).

In the third case the array looks like 1 2 3 3 4 5 and there are no inversions.

  


题解


  

tyvj《逆序对加强版》的加强版。同样的我们也考虑离线的做法。在那道题中,我们可以得到“修改一个点之后的逆序对”,这道题其实相当于同时改两个点。但要知道,每次交换算答案时要分情况讨论:当a[x]==a[y]和当a[x]!=a[y]时答案的计算是不一样的.  


#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm>
#define ll long long
#define MAXN 200002
using namespace std;
int n,m,a[MAXN],ha[MAXN],hs[MAXN],maxs,zz;
struct qus{int l,r;} b[MAXN];
int lastl[MAXN],prel[MAXN],lastr[MAXN],prer[MAXN];
ll v[MAXN],cgl[MAXN],cgr[MAXN],tot,tr[MAXN];
void init()
{
scanf(&quot;%d%d&quot;,&n,&m);
int i;
for(i=1;i<=n;i++)
{scanf(&quot;%d&quot;,&a);
ha=a;
}
sort(ha+1,ha+n+1);
for(i=1;i<=n;i++)
{if(ha!=ha[i-1])
hs[++zz]=ha;
}
for(i=1;i<=m;i++)
{scanf(&quot;%d%d&quot;,&b.l,&b.r);
prel=lastl[b.l]; lastl[b.l]=i;
prer=lastr[b.r]; lastr[b.r]=i;
}
}
int getw(int x)
{
int s=1,t=zz,mid;
while(s<=t)
{mid=(s+t)>>1;
if(hs[mid]<x) s=mid+1;
else t=mid-1;
}
return s;
}
int lowbit(int x) {return x&(-x);}
ll find(int x)
{
ll sum=0;
for(;x>0;x-=lowbit(x)) sum+=tr[x];
return sum;
}
void insert(int x)
{for(;x<=zz;x+=lowbit(x)) tr[x]++;}
void work()
{
int i,j,k,x,y;
maxs=zz;
for(i=1;i<=n;i++)
{j=lastl; k=lastr;
x=getw(a);
v+=find(maxs)-find(x);
tot+=v;
while(j)
{y=getw(a[b[j].r]);
cgl[j]+=find(maxs)-find(y);
j=prel[j];
}
while(k)
{y=getw(a[b[k].l]);
cgr[k]+=find(maxs)-find(y);
k=prer[k];
}
insert(x);
}
memset(tr,0,sizeof(tr));
for(i=n;i>0;i--)
{j=lastl; k=lastr;
x=getw(a);
v+=find(x-1);
while(k)
{y=getw(a[b[k].l]);
cgr[k]+=find(y-1);
k=prer[k];
}
while(j)
{y=getw(a[b[j].r]);
cgl[j]+=find(y-1);
j=prel[j];
}
insert(x);
}
for(i=1;i<=m;i++)
{x=b.l; y=b.r;
if(a[x]==a[y]) printf(&quot;%lld\n&quot;,tot);
else printf(&quot;%lld\n&quot;,tot-v[x]-v[y]+cgl+cgr+1);
}
}
int main()
{
init(); work();
return 0;
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-143550-1-1.html 上篇帖子: CodeChef Chef and Segments 下篇帖子: ZOJ3778:Talented Chef
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表