简单的一个分块处理:优雅的暴力枚举

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2e4 + 7;

int st[N];
struct Block {
  int l, r;
  ll sum, m;
} block[151];
struct Node {
  ll v, x;
} a[N];
bool cmp ( Node x, Node y ) {
  if(x.v == y.v) return x.x < y.x;
  return x.v < y.v;
}

void build ( ll n ) {
  ll p = sqrt ( n );
  ll t = n/p;
  if( p * t < n ) t ++;
  for( int i = 1;i <= t;i ++ ) {
    block[i].l = ( i - 1 ) * p;
    block[i].r = i * p;
    block[i].m = block[i].sum = 0;
  }
  block[t].r = n;
}

ll find ( int q, ll n ) {
  ll ans = 0, sum = 0, m = 0;
  ll t = sqrt ( n );
  ll k = n / t;
  if(k * t < n) k ++;
  t = a[q].x / t + (a[q].x % t != 0); int p = 0;
  for( p = 1;p < t;p ++ )
    m += block[p].m, sum += block[p].sum;

  for( int j = block[t].l + 1;j < a[q].x;j ++ )
  if(st[j])
    m ++, sum += j;

  ans += a[q].v * ( m * a[q].x - sum );
  st[a[q].x] = 1;
  block[p].m ++, block[p].sum += a[q].x;

  m = sum = 0;
  for( int j = a[q].x + 1; j <= block[p].r;j ++ )
  if(st[j])
    m ++, sum += j;

  for( p += 1; p <= k; p ++ )
    m += block[p].m, sum += block[p].sum;
  ans += a[q].v * ( sum - m * a[q].x );
  return ans;
}

int main() {
  int n;
  ll ans = 0;
  scanf ( "%d", &n );
  ll maxx = 0;
  for(int i = 1;i <= n;i ++) {
    scanf ( "%lld%lld", &a[i].v, &a[i].x );
    maxx = max ( maxx, a[i].x );
  }
  build ( maxx );
  sort ( a + 1, a + n + 1, cmp );
  for( int i = 1;i <= n;i ++ )
    ans += find ( i, maxx );
  printf ( "%lld", ans );
  return 0;
}

P2345 [USACO04OPEN] MooFest G的更多相关文章

  1. luoguP5094 [USACO04OPEN]MooFest 狂欢节

    get 到的 这种需要求 含 max 的式子,枚举最大值的方法非常普遍. 类似的,还有含 min , gcd 的式子,枚举他们也很普遍 主要难点 我们首先想到,先按 v 从小到大排序,因为这样既可以简 ...

  2. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  3. 文件图标SVG

    ​<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...

  4. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  5. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  6. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...

  7. Linux deepin 下sublimes配置g++ openGL

    参考 :http://blog.csdn.net/u010129448/article/details/47754623 ubuntu 下gnome只要将代码中deepin-terminal改为gno ...

  8. [翻译svg教程]svg 中的g元素

    svg 中的<g>元素用来组织svg元素.如果一组svg元素被g元素包裹了,你可以通过对g元素进行变换(transform),被g元素包裹的元素也将被变换,就好这些被svg包裹的元素是一个 ...

  9. 软件工程:黄金G点小游戏1.0

    我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...

  10. 2016huasacm暑假集训训练五 G - 湫湫系列故事——减肥记I

    题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/G 这是一个01背包的模板题 AC代码: #include<stdio.h&g ...

随机推荐

  1. Java 03-基础 堆和栈(另,理解Java内存)

    概述: 栈区(STACK)堆区(HEAP) 1.栈中主要存放一些基本类型的变量,且每一个基本数据类型有固定的大小(byte,short,int,long,float,double,boolean,ch ...

  2. gym102586C Sum Modulo

    题意: 给你 \(n,m,k\) 以及\(p_i(1\le i\le n)\) ,保证 \(\sum p_i=1\) 你有一个数 \(X\),一开始 \(X=0\) 每次你会生成一个随机数 \(A\) ...

  3. 基础篇之Markdown基础语法

    标题 1. # + 空格 + 标题名字 → 一级标题 2. ## + 空格 + 标题名字 → 二级标题 3. ### + 空格 + 标题名字 → 三级标题 ...... 6.###### + 空格 + ...

  4. Unity 纯C# 完成 APK从下载到 自安装

    最简单的就是用androidStudio 进行编辑,打个aar 包,在Unity中调用方法,很便捷以下内容均转载Unity论坛,Android API24版本下可用,android API 24以上版 ...

  5. python日期时间、时间戳互相转换

    日期时间格式字符串转时间戳: 1 import time 2 3 def produce_ctime(stringTime): 4 """ 5 日期时间格式字符串 -&g ...

  6. python import导入失败 相对路径 绝对路径

    首先我们有这样一个目录结构 经过我无数次的调试,我发现从test3调用spider以及downloadss文件可以直接import调用 但是从外部的app.py文件调用,spider.py文件死活调用 ...

  7. 在Windows系统上安装和配置Jenkins自动发布

    一.安装jenkins的流程转载于: https://www.jianshu.com/p/de9c4f5ae7fa 二.在window中执行批处理文件bat或者powershell可以成功,但是Jen ...

  8. Web实时通信之SignalR

    前言 对于B/S模式的项目,基础的场景都是客户端发起请求,服务端返回响应结果就结束了一次连接:但在很多实际应用场景中,这种简单的请求和响应模式就显得很吃力,比如消息通知.监控看板信息自动刷新等实时通信 ...

  9. Python-pytest -> Selenium之异常处理

    Selenium之异常处理: 引用的库:(可以查看库里提供的异常类) from selenium.common.exceptions import ElementNotVisibleException ...

  10. jquery.min.js:2 Uncaught SyntaxError: Unexpected identifier

    错误描述:样式没加载出错,还没发起action请求,action有断点,后端无报错. 错误原因:找了好久,知道是url请求路径错误,搞了几次不对.重新对比url发现是路径拼接错误.注意单引号和双引号. ...