题面:https://www.cnblogs.com/Juve/articles/11791219.html

上来先看T1,发现和之前做过的treap一样,是线段树维护单调栈,然后打了一个小时,然后它挂了

于是看后面的题,然后T2:woc它说的是什么?怎么这么多变量?貌似k=2可以大力分类讨论?

写了半个小时,发现恶心至极,然后puts("-1")就跑了

T3好像有暴力?打了个搜索,一遍过样例,应该有40分了吧,在加上T1暴力就60分了

突然发现T1可以分块直接艹过,果断分块,然后过样例,对拍出锅,

对拍发现了4出错误,然后改完了发现我的分块会被卡成n方?

如果是一个单增的序列,然后他要修改一个特别靠前的位置,我就成n2了,但是这种数据倒也跑的挺快,只是对拍不过

最后半个小时,检查了一下文件名,然后T3本着骗分的原则我按a+b排序从大到小输出

然后改了改T1,发现它过拍了,然后就这样了,一直到考试结束,感觉T1可能会被卡

期望得分:80+10+30=120

实际得分:100+10+100=210!!??

T3不是正解居然A了。。。我rp估计要掉光了,然后T1没有被卡??!!

其实$nlog^2n$和$n\sqrt{n}$复杂度差不多,卡我时间还是挺难的,虽说正解只有一个log,但是常数没有分块优秀

T1:

说是分块其实就是优化的暴力

预处理原序列的前缀答案,前缀最大值,块内最值,

那么每次修改对于前面的答案没有影响,直接接过来,然后在本块中跑暴力,把修改位置所在块的贡献加上,同时记录到当前块的最大值

然后扫后面的块,如果块内最大值比当前最大值小,那么这个块没有用,反之就暴力更新块内的答案

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define re register
using namespace std;
const int MAXN=1e5+;
inline int read(){
re int x=,f=;re char ch=getchar();
while(ch<''||ch>''){
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
x=(x<<)+(x<<)+ch-'';
ch=getchar();
}
return x*f;
}
int n,m,a[MAXN],pos[MAXN],b[MAXN],d[MAXN],maxx=;
int blo,bel[MAXN],l[MAXN],r[MAXN],tot,mx[MAXN],len[MAXN],fmx[MAXN],smx[MAXN],p[MAXN];
signed main(){
freopen("TaoPApp.in","r",stdin);
freopen("TaoPApp.out","w",stdout);
n=read(),m=read();
blo=sqrt(n)+;
tot=n/blo;
if(n%blo) ++tot;
for(re int i=;i<=n;++i){
a[i]=read();
bel[i]=(i-)/blo+;
}
for(re int i=;i<=tot;++i){
l[i]=r[i-]+;
r[i]=i*blo;
}
r[tot]=min(r[tot],n);
for(re int i=;i<=tot;++i){
for(re int j=l[i];j<=r[i];++j){
if(fmx[i]<=a[j]){
fmx[i]=a[j];
p[i]=j;
}
}
for(re int j=l[i];j<=r[i];++j){
if(j!=p[i]&&smx[i]<=a[j]){
smx[i]=a[j];
}
}
}
for(re int i=;i<=n;++i){
mx[i]=max(mx[i-],a[i]);
len[i]=len[i-];
if(maxx<a[i]){
maxx=a[i];
++len[i];
}
}
for(re int i=;i<=m;++i){
pos[i]=read(),b[i]=read();
re int tmp=a[pos[i]];
a[pos[i]]=b[i];
re int c=bel[pos[i]];//当前块
re int res=len[l[c]-];//当前块前的答案
re int zd=mx[l[c]-];//上一个块前的最大值
for(re int j=l[c];j<=r[c];++j){
if(zd<a[j]){
zd=a[j];
++res;
}
}
if(pos[i]!=p[c]){
for(re int j=c+;j<=tot;++j){
if(mx[r[j]]<=zd) continue;
for(re int k=l[j];k<=r[j];++k){
//++tot;
if(zd<a[k]){
zd=a[k];
++res;
}
}
res+=len[n]-len[r[j]];
break;
}
printf("%d\n",res);
a[pos[i]]=tmp;
}else{
re int tmpp=max(zd,smx[c]);
tmpp=max(tmpp,b[i]);
for(re int j=c+;j<=tot;++j){
if(fmx[j]<=tmpp) continue;
for(re int k=l[j];k<=r[j];++k){
if(tmpp<a[k]){
tmpp=a[k];
++res;
}
}
}
printf("%d\n",res);
a[pos[i]]=tmp;
}
}
return ;
}
/*
5 3
1 2 3 4 4
1 5
5 5
2 3
*/

T2:

贪心+模拟

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#define int long long
using namespace std;
const int MAXN=5e4+;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
int k,c[MAXN],d[MAXN],m[MAXN],p[MAXN],e[MAXN],r[MAXN],E[MAXN],cst,tot=,ans=;
struct node{
int num,cost;
friend bool operator < (node a,node b){
return a.cost<b.cost;
}
};
multiset<node>s1,s2;
signed main(){
freopen("happy.in","r",stdin);
freopen("happy.out","w",stdout);
k=read();
for(int i=;i<=k;++i) c[i]=read(),d[i]=read(),m[i]=read(),p[i]=read();
for(int i=;i<k;++i) e[i]=read(),r[i]=read(),E[i]=read();
cst=c[];
for(int i=;i<=k;++i){
if(p[i]) s1.insert((node){p[i],m[i]+cst});
tot+=p[i];
while(d[i]){
if(s1.empty()){
puts("-1");
return ;
}
node x=*s1.begin();
int num=min(d[i],x.num);
s1.erase(s1.begin());
ans+=x.cost*num;
x.num-=num,tot-=num,d[i]-=num;
if(x.num) s1.insert(x);
}
if(i!=k){
cst=min(cst+r[i],c[i+]);
while(tot>e[i]){
node x=*--s1.end();
int num=min(tot-e[i],x.num);
s1.erase(--s1.end());
tot-=num,x.num-=num;
if(x.num) s1.insert(x);
}
for(multiset<node>::iterator it=s1.begin();it!=s1.end();++it){
s2.insert((node){(*it).num,(*it).cost+E[i]});
}
swap(s1,s2),s2.clear();
}
}
printf("%lld\n",ans);
return ;
}

T3:

按a排序,保留最大的A,然后在剩下的里面两两分组,组内取b较大的

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int MAXN=4e5+;
int n;
struct node{
int a,b,id;
friend bool operator < (node aa,node bb){
return aa.a==bb.a?aa.b>bb.b:aa.a>bb.a;
}
}p[MAXN];
signed main(){
freopen("grandmaster.in","r",stdin);
freopen("grandmaster.out","w",stdout);
scanf("%lld",&n);
for(int i=;i<=*n+;++i){
scanf("%lld%lld",&p[i].a,&p[i].b);
p[i].id=i;
}
sort(p+,p+*n++);
printf("%lld\n",p[].id);
for(int i=;i<=*n+;i+=){
if(p[i].b>p[i+].b){
printf("%lld\n",p[i].id);
}
else printf("%lld\n",p[i+].id);
}
return ;
}

csp-s模拟99题解的更多相关文章

  1. [CQOI2012]模拟工厂 题解(搜索+贪心)

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  2. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  3. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  4. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  5. 10.8 wtx模拟题题解

    填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...

  6. [NOIP模拟13]题解

    A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...

  7. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  8. 【洛谷】xht模拟赛 题解

    前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...

  9. 10.9 guz模拟题题解

    感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...

随机推荐

  1. SB般的“WE战队”输掉了比赛

    事实再一次证明,对于LOL这种游戏,国服选手是根本就不能有一点期待的, 国服环境太好了,赢了可以吹,输了不能骂,自信心极度膨胀,估计WE俱乐部都没有个心理咨询师, 下岗了还可以再卖卖脸,卖卖饼, 国服 ...

  2. BOM的构成

    1.DOM 和 BOM 的区别 DOM:文档对象模型,把[文档]当做一个[对象]来看待,DOM的顶级对象是document 主要学习的是操作页面元素,DOM 是 W3C 的标准规范 BOM:浏览器对象 ...

  3. 随笔记录 yum -y clean all出错解决方案

    出现以下问题的解决方案: 使用解决方案之前,要先确定一下几种情况: 1.检查光盘是否挂载 2.ISO映像文件是否使用正确 解决方案1: rm -rf /var/cache/yum/* yum repo ...

  4. 发现一个新的远程软件 gotohttp

    之前直到远程桌面连接是TeamViewer 替换的原因是: 被控制端版本 11.0.x (很久以前安装的),而我本地的Teamviewer是 14.x, 去连接,好像提示被控制端的版本太低:本地使用 ...

  5. Dart编程运算符

    表达式是一种特殊类型的语句,它计算为一个值.每个表达都由 操作数 - 表示数据 运算符 - 定义如何处理操作数以生成值. 考虑以下表达式 2 + 3.在该表达式中,2和3是操作数,符号+(加号)是 运 ...

  6. 云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析

    POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL.PostgreSQL.Oracle.POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB ...

  7. 好久没写题解了= =这次是bzoj 1051

    唉= =这道题我都想到了tarjan缩点,但是没有想到最后一步啊= =我们很容易想到反向建边然后缩点,这时候我们看由多少个联通块的入度为0,如果为1个,那就输出这个块的大小,否则输出0: #inclu ...

  8. Python 列表,元组,字典

    0)字符串切片 py_str = 'python' >>>py_str[0] #取第一个字符串,返回值为"p",超出范围会报错 >>>py_st ...

  9. delphi windows操作

    输入 procedure TypeKeyString(s: string); var c: Char; i: integer; off: integer; vkw: Word; begin to Le ...

  10. [JZOJ 5819] 大逃杀

    题意:求一个树上背包~~ 先贴代码存一下,好像打挂了. #include <bits/stdc++.h> using namespace std; const int maxn = 400 ...