2016 acm香港网络赛 D.Curious Cupid[莫队算法]

题意:给你两串数,一串代表男的,一串代表女的,每个数代表这个人说的语言,现在要给一个区间[L,R]里面的人配对,只有语言相同的才能配一对,问对于每个区间,最多能配成几对。

思路:莫队算法来处理。

#include
using namespace std;
//#define min(a,b) a>=b?b:a
struct lx{
    int l,r,id;
}p[50005];
int n,m,k,sq;
bool cmp(lx a,lx b){
    if(a.l/sq==b.l/sq)return a.rp[i].r){
            cnt-=min(mp1[ed1[right]],mp2[ed1[right]]);
            mp1[ed1[right]]--;
            if(ed2[right]!=ed1[right])cnt-=min(mp1[ed2[right]],mp2[ed2[right]]);
            mp2[ed2[right]]--;
            cnt+=min(mp1[ed1[right]],mp2[ed1[right]]);
            if(ed2[right]!=ed1[right])cnt+=min(mp1[ed2[right]],mp2[ed2[right]]);
            right--;
        }
        while(left>p[i].l){
            left--;
            cnt-=min(mp1[ed1[left]],mp2[ed1[left]]);
            mp1[ed1[left]]++;
            if(ed2[left]!=ed1[left])cnt-=min(mp1[ed2[left]],mp2[ed2[left]]);
            mp2[ed2[left]]++;
            cnt+=min(mp1[ed1[left]],mp2[ed1[left]]);
            if(ed2[left]!=ed1[left])cnt+=min(mp1[ed2[left]],mp2[ed2[left]]);
        }
        while(left


你可能感兴趣的:(Hong,Kong,Regional,Online,2016)