codeforces 691F Couple Cover(暴力预处理)

题意:

给你一个长度为n的序列,m个询问,每次学问一个数

让你回答序列中乘积不小于它的数对有多少对

思路:

预处理当前序列中不大于当前值的数对有多少,然后用总数减去他的前一个就是答案了

/* ***********************************************
Author        :devil
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <stdlib.h>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const int N=3e6;
int n,m,ma;
LL cnt[N],sum[N];
int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&m);
        cnt[m]++;
        ma=max(ma,m);
    }
    for(int i=1;i<=ma;i++)
        for(int j=1;j<=ma;j++)
        {
            if(1ll*i*j>N) break;
            if(i==j) sum[i*j]+=cnt[i]*(cnt[j]-1);
            else sum[i*j]+=cnt[i]*cnt[j];
        }
    for(int i=2;i<=N;i++)
        sum[i]+=sum[i-1];
    scanf("%d",&m);
    LL tmp=1ll*n*(n-1);
    while(m--)
    {
        scanf("%d",&ma);
        printf("%I64d\n",tmp-sum[ma-1]);
    }
    return 0;
}
时间: 2024-12-29 17:45:55

codeforces 691F Couple Cover(暴力预处理)的相关文章

codeforces 691F Couple Cover 暴力

分析:开一个300w的数组,统计,然后nlogn统计每个值在在序对第一个出现有多少种情况 时间复杂度:O(nlogn) n在3e6数量级 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; typedef long long LL;

Codeforces 57C Array dp暴力找规律

题目链接:点击打开链接 先是计算非递增的方案, 若非递增的方案数为x, 则非递减的方案数也是x 答案就是 2*x - n 只需求得x即可. 可以先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元即可. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #def

Codeforces 57B Martian Architecture 暴力||线段树

题目链接:点击打开链接 题意:n长的序列(初始全为0) m个操作 k个查询 下面m个操作[l,r] h 代表 a[l] +=h; a[l+1] += h+i; a[l+i] += h+i;  l<=i<=r 然后问k个位置的和 因为k<=100 所以直接暴力也可以 ----------------------- 如果k<=100000 也是可以做的 只需要给区间记录一个标记lazy,表示从左端点开始 l, l+1, l+i ··· l+r 而向下更新时, 左区间则直接更新, 右区间

codeforces 691F(组合数计算)

Couple Cover, a wildly popular luck-based game, is about to begin! Two players must work together to construct a rectangle. A bag with nballs, each with an integer written on it, is placed on the table. The first player reaches in and grabs a ball ra

codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)

题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不重复) 1.交换两列,对于整个矩阵只能操作一次 2.每行交换两个数. 交换后是否可以使每行都是1-m 数字递增. 解题思路: 1.得到矩阵后先判断,是否每行可以交换两个数可以得到递增的矩阵,如果可以则输出“YES”. 2.暴力交换两列,交换两列后,判断每行是否可以交换两个数得到递增的矩阵,如果可以则

Educational Codeforces Round 14 - F (codeforces 691F)

题目链接:http://codeforces.com/problemset/problem/691/F 题目大意:给定n个数,再给m个询问,每个询问给一个p,求n个数中有多少对数的乘积≥p 数据范围:2≤n≤10^6, 1≤ai≤3*10^6,1≤m≤10^6, 1≤p≤3*10^6 解题思路:比赛的时候比较naive的思路是把n中的数字排序去了重之后,对于每个p,最多枚举√p步,就能得到答案.而这个naive的思路是O(p√p)的,结果T了. 后来百思不得其解,去看了官方的解答.感觉是一种很有

[codeforces 200 A Cinema]暴力,优化

题意大致是这样的:有一个有n行.每行m个格子的矩形,每次往指定格子里填石子,如果指定格子里已经填过了,则找到与其曼哈顿距离最小的格子,然后填进去,有多个的时候依次按x.y从小到大排序然后取最小的.输出每次填的格子的坐标. 思路:这道题出自Codeforces Round #126 (Div. 2)是个暴力优化的题.如果指定格子未填,则填到里面.否则枚举曼哈顿距离,然后枚举格子找答案.裸的暴力太慢了,主要是因为每次曼哈顿距离都是从1开始搜索,如果每次指定的坐标都是同一个,则做了大量的重复工作.不妨

codeforces 279C C. Ladder(rmq+预处理)

题目连接: codeforces 279C 题目大意: 给出一个序列,m次查询,每次给出一个子串,问这个子串是否满足,中间能够找到一个元素,让这个元素作为前后分别单调的分界. 题目分析: 首先对于每次查询,我们知道分界一定是最大的元素,所以我们可以用rmq预处理出区间最大. 然后为了判断这个区间是否能够通过最大的元素作为分界点而前后单调,我们可以通过预处理,正向和反向分别扫一遍,记录某一个点的为最大元素的能够向左和向右得到的最长的单调子串的长度,然后每次只需要O(1)的判断就可以,判断当前元素最

codeforces 897A Scarborough Fair 暴力签到

codeforces 897A Scarborough Fair 题目链接: http://codeforces.com/problemset/problem/897/A 思路: 暴力大法好 代码: #include <iostream> #include <stdio.h> #include <string.h> using namespace std; typedef long long ll; int n,m; string s; int main() { ios