题目大意:

n波人去k*k的电影院看电影。

要尽量往中间坐,往前坐。

直接枚举,贪心,能坐就坐,坐在离中心近期的地方。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 1000005
#define lowbit(x) (x&(-x)) using namespace std; struct BIT
{
int sum;
void init(){sum=0;}
}bit[105][105];
int q,n;
int Sum(int row,int x)
{
int ret=0;
for(int i=x;i>=1;i-=lowbit(i))
ret+=bit[row][i].sum;
return ret;
}
int query(int row,int l,int r)
{
return Sum(row,r)-Sum(row,l-1);
}
void update(int row,int x)
{
for(int i=x;i<=n;i+=lowbit(i))
bit[row][i].sum++;
}
int cal(int s,int e)
{
return (s+e)*(e-s+1)/2;
}
int main()
{
scanf("%d%d",&q,&n);
int cen=n/2+1; for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
{
bit[i][j].init();
}
for(int i=1;i<=q;i++)
{
int num;
scanf("%d",&num);
int ansr=-1,ansc=-1;
int min_val=0x3f3f3f3f; for(int r=1;r<=n;r++)
{
for(int c=1;c+num-1<=n;c++)
{
if(query(r,c,c+num-1)==0)
{
int tmp;
if(c>=cen)
{
tmp=cal(c,c+num-1)-cen*num+abs(r-cen)*num;
}
else if(c+num-1<=cen)
{
tmp=cen*num-cal(c,c+num-1)+abs(r-cen)*num;
}
else
{
tmp=abs(r-cen)*num+cal(cen,c+num-1)-(c+num-cen)*cen+cen*(cen-c)-cal(c,cen-1);
}
if(tmp<min_val)
{
min_val=tmp;
ansr=r;
ansc=c;
}
}
}
}
if(min_val!=0x3f3f3f3f)
{
printf("%d %d %d\n",ansr,ansc,ansc+num-1);
for(int j=ansc;j<=ansc+num-1;j++)
update(ansr,j);
}
else puts("-1");
}
return 0;
}

Codeforces Beta Round #10 B. Cinema Cashier (树状数组)的更多相关文章

  1. Codeforces Beta Round #10 B. Cinema Cashier 暴力

    B. Cinema Cashier 题目连接: http://www.codeforces.com/contest/10/problem/B Description All cinema halls ...

  2. Educational Codeforces Round 10 D. Nested Segments (树状数组)

    题目链接:http://codeforces.com/problemset/problem/652/D 给你n个不同的区间,L或者R不会出现相同的数字,问你每一个区间包含多少个区间. 我是先把每个区间 ...

  3. Codeforces Round #365 (Div. 2) D 树状数组+离线处理

    D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...

  4. Codeforces Round #261 (Div. 2) D 树状数组应用

    看着题意:[1,i]中等于a[i]的个数要大于[,jn]中等于a[j]的个数 且i<j,求有多少对这种(i,j)  ,i<j可是 i前面的合法个数 要大于j后面的 看起来非常像逆序数的样子 ...

  5. Codeforces 703D Mishka and Interesting sum(树状数组+扫描线)

    [题目链接] http://codeforces.com/contest/703/problem/D [题目大意] 给出一个数列以及m个询问,每个询问要求求出[L,R]区间内出现次数为偶数的数的异或和 ...

  6. codeforces 985 E. Pencils and Boxes (dp 树状数组)

    E. Pencils and Boxes time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. CodeForces 380C Sereja and Brackets(扫描线+树状数组)

    [题目链接] http://codeforces.com/problemset/problem/380/C [题目大意] 给出一个括号序列,求区间内左右括号匹配的个数. [题解] 我们发现对于每个右括 ...

  8. CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)

    树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且代码量和常数较小 首先定义一个数组 int c[N]; 并清空 memset(c, 0, sizeof c) ...

  9. Codeforces 390E Inna and Large Sweet Matrix 树状数组改段求段

    题目链接:点击打开链接 题意:给定n*m的二维平面 w个操作 int mp[n][m] = { 0 }; 1.0 (x1,y1) (x2,y2) value for i : x1 to x2 for ...

随机推荐

  1. C++创建对象的三种方式

    C++在创建对象的时候,有三种方式: #include <iostream> using namespace std; class A { private: int n; public: ...

  2. 新建linux组、用户命令

    之前在安装oracle的时候,出现了一个问题:安装Oracle,新建组.用户的时候的一个错误.看这篇博客前,先看这个链接,学习要从解决出现的问题出手. 建立用户组和用户 下面总结一下Linux建立组和 ...

  3. DropDownList SelectedIndexChanged使用

    在asp.net中使用dropdownlist,默认是不会送的,我们想要选中一项然后更改相关的数据,应该吧属性AutoPostback改为true. http://msdn.microsoft.com ...

  4. Agg学习笔记

    很久前就听一大牛说起Agg,据说是一个架构极度牛B的2D引擎,沉寂了许久,最后花了两周时间走马观花地把它过了一遍.果然如那大牛所言,这家伙简直就是巧夺天工的艺术品.今天稍稍瞄了一下Google扔出来的 ...

  5. Strategic Game(匈牙利算法,最小点覆盖数)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. UINavigationController具体解释(二)

    @UINavigationBar-----(是一个View)基本介绍 1.导航栏,和导航控制器一样,是一个容器用来显示提供的其它对象的内容 2.导航栏显示的内容,通过设置UINavigationIte ...

  7. 颜色空间RGB与HSV(HSL)的转换

    一般的3D编程只需要使用RGB颜色空间就好了,但其实美术人员更多的是使用HSV(HSL),因为可以方便的调整饱和度和亮度. 有时候美术需要程序帮助调整饱和度来达到特定风格的渲染效果,这时候就需要转换颜 ...

  8. android代码实现关机

      1.API没有开放,需要提升为syetem app级别! 2.android 模块编译,mm 命令 2.1.先进入顶层  source build/envsetup.sh 2.2.进入目录   m ...

  9. 【JavaScript】history.back() 网页已过期

    使用history.back()进行返回时,有时会提示“网页已过期”, 多数是因为目标页面的form为post提交方式,而且是表单已经提交后的响应页面,无法找到form中的具体参数,而“报错”. 具体 ...

  10. JVM 重排序

    在java代码到最终执行的指令序列的整个过程中,会出现重排序.也就是说最终执行的顺序并不是按照源代码执行的顺序来进行的. 其中1为编译器的优化重排序,2,3是处理器的重排序. 数据依赖 如果两个操作访 ...