ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Tokitsukaze and Strange Inequality Codeforces Round #789 (Div. 2) C

2022-05-09 13:03:22  阅读:226  来源: 互联网

标签:typedef const int 789 long Codeforces Tokitsukaze include define


复盘

前缀和的姿势增加了

 

前缀和的作法是处理下 a,c   b,d 
计算当c为第i个时,  l[c][a] 为满足条件个数   c取 1 ~ n-1 a取1 ~ c-1  注意循环的顺序的
  当b为第i个时 r[b][d] 为满足条件的个数 b取 2 ~ n j取 n ~ b+1 注意循环的顺序
最后枚举bc
b 2 ~ n-2
c b+1 ~ n-1
这时候由于有前缀和处理,l[c][b+1]就是满足条件pa<pc的数量
            r[b][c+1]就是满足条件pb>pd的数量
实现见代码

正解

//  AC one more times

#pragma warning(disable:4996)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<string.h>
#include <cstring>
#include <complex>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <list>
#include <bitset>
#include <assert.h>
#include <unordered_set>
#include <unordered_map>
#include <iomanip>
#include <random>
#include <iterator>
#include <time.h>


#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long,long long> PLL;
#define inf64 0x3f3f3f3f3f3f3f3f
const int  inf = 0x3f3f3f3f;
const int maxn = 2e6 + 6;
const double eps = 1e-8;
const long long mod = 1000000;
template<typename T>
void init(T q[], int n, T val){   for (int i = 0; i <= n; i++) q[i] = val;  }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
bool cmp(int c, int d) { return c > d; }


int n,a[5010],l[5010][5010],r[5010][5010];
void solve()
{
    LL ans=0;
    cin>>n;
    for(int i=1;i<=n;i++)   cin>>a[i];
    for(int i=1;i<=n+1;i++) for(int j=1;j<=n+1;j++) r[i][j]=0;
    for(int i=1;i<=n-1;i++)
        for(int j=1;j<i;j++)
            l[i][j]=l[i][j-1]+(a[j]<a[i]);
    for(int i=n;i>=2;i--)
        for(int j=n;j>i;j--)
            r[i][j]=r[i][j+1]+(a[i]>a[j]);
    for(int i=2;i<=n-2;i++) 
        for(int j=i+1;j<=n-1;j++)   
            ans+=l[j][i-1]*r[i][j+1];
    cout<<ans<<endl;
}




int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int T;cin>>T;
    while(T--)
        solve();    
    return 0;
}

    

 

 

暴力:TLE5 的

 

//  AC one more times

#pragma warning(disable:4996)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string>
#include<string.h>
#include <cstring>
#include <complex>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <list>
#include <bitset>
#include <assert.h>
#include <unordered_set>
#include <unordered_map>
#include <iomanip>
#include <random>
#include <iterator>
#include <time.h>


#define fi first
#define se second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(), (x).end()

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long,long long> PLL;
#define inf64 0x3f3f3f3f3f3f3f3f
const int  inf = 0x3f3f3f3f;
const int maxn = 2e6 + 6;
const double eps = 1e-8;
const long long mod = 1000000;
template<typename T>
void init(T q[], int n, T val){   for (int i = 0; i <= n; i++) q[i] = val;  }
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
bool cmp(int c, int d) { return c > d; }

void solve()
{
    int n;
    int s[5010];
    cin>>n;
    for(int i=1;i<=n;i++)   cin>>s[i];
    int ans=0;
    vector<PII> a;
    vector<PII> b;
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(s[j]>s[i])   a.pb({i,j});    //a c
            if(s[i]>s[j])   b.pb({i,j});    //b d
        }
    }
    for(auto &it:a)
    {
        for(auto &iter:b)
        {

            if(iter.first>=it.second)    break;
        if(it.first<iter.first&&it.second>iter.first&&iter.second>it.second)
                ans++;

        }
    }
    cout<<ans<<endl;
}
int main()
{
    std::ios::sync_with_stdio(false);   cin.tie(nullptr), cout.tie(nullptr);
    int T;cin>>T;
    while(T--)
        solve();    
    return 0;
}

 

标签:typedef,const,int,789,long,Codeforces,Tokitsukaze,include,define
来源: https://www.cnblogs.com/magicat/p/16248802.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有