欢迎光临散文网 会员登陆 & 注册

The 2022 ICPC Asia Kunming Regional Programming Contest_Easy Str

2022-04-22 08:39 作者:Clayton_Zhou  | 我要投稿

// 

// https://ac.nowcoder.com/acm/contest/32708/E


#include "stdafx.h"

 

#include <algorithm>


#include <iostream>

#include <cstring>

 using namespace std;

const int N = 1E5 + 100;

int n, m, block;

int arr[N]={

0,1, 2, 3,4, 1,2,3

};


/*  莫队算法 (Mo's Algorithm)

For query 4.4,  repeat=3

123.....

....123

1...23

12....3

For query 3.3.  repeat=2

12....3

1...23

....123

*/

long long res[N];

pair<int, int> cnt[N];

struct Mo {

    int L, r, idx;

    bool operator < (const Mo &rhs) const {

        if (L / block == rhs.L  / block) {

            return r < rhs.r;

        }

        return L  / block < rhs.L  / block;

    }

};

Mo qry[N];


int Q[N][2]={

1, 1,

3, 3,

2 ,3,

2 ,4,

1 ,3,

1 ,4,

4,4

};


int main() {

      n=7;m=7;

    /*

cin >> n;


    for (int i = 1; i <= n; i++) {

        cin >> arr[i];

    }*

    cin >> m;

    for (int i = 1; i <= m; i++) {

        cin >> qry[i].l >> qry[i].r;

        qry[i].i = i;

    }*/


for (int i = 1; i <= m; i++) {

         qry[i].L =Q[i-1][0]; qry[i].r=Q[i-1][1];

        qry[i].idx = i;

}

    block = sqrt(n);  

cout<<block<<endl;

   sort(qry + 1, qry + 1 + m);

for (int i = 1; i <= m; i++) cout<<qry[i].idx<<"   ";

cout<<endl;


    int left = 1, r = n;

  

for (int i = 1; i <= n; i++) {

        cout<<cnt[arr[i]].first<<",  sec="<<cnt[arr[i]].second <<endl;

    }

    int  repeat = 0;

    for (int i = 1; i <= m; i++) {

        while (left < qry[i].L ) {

            repeat += cnt[arr[left]].second;

            cnt[arr[left++]].first += 1;

        }

cout <<" repeat="<<repeat<<" i="<<i<<" left="<<left<<" r="<<r<<endl;

        while (left > qry[i].L ) {

            cnt[arr[--left]].first -= 1;

            repeat -= cnt[arr[left]].second;

        }

cout <<" repeat="<<repeat<<" i="<<i<<" left="<<left<<" r="<<r<<endl;

        while (r < qry[i].r) {

            cnt[arr[++r]].second -= 1;

            repeat -= cnt[arr[r]].first;

        }

cout <<" repeat="<<repeat<<" i="<<i<<" left="<<left<<" r="<<r<<endl;

        while (r > qry[i].r) {

            repeat += cnt[arr[r]].first;

            cnt[arr[r--]].second += 1;

        }

cout <<" repeat="<<repeat<<" i="<<i<<" left="<<left<<" r="<<r<<endl;

cout <<repeat<<" i="<<i<<" r="<<r<<" L="<<qry[i].L<<" qry[i].r="<<qry[i].r<<"  qry[i].idx= "<<qry[i].idx<<endl;

for (int ii = 1; ii <= n; ii++) 

{

cout<<cnt[arr[ii]].first<<",  sec="<<cnt[arr[ii]].second <<endl;

}

        res[qry[i].idx] = 1LL * qry[i].L  * (n - qry[i].r + 1) - repeat;

cout<<res[qry[i].idx]<<"=res[qry[i].idx]"<<endl;


    }

    for (int i = 1; i <= m; i++) {

        cout << res[i] << endl;

    }

    return 0;

}


The 2022 ICPC Asia Kunming Regional Programming Contest_Easy Str的评论 (共 条)

分享到微博请遵守国家法律