csp-s模拟99题解
题面: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题解的更多相关文章
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- HGOI NOIP模拟4 题解
NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...
- 10.8 wtx模拟题题解
填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...
- [NOIP模拟13]题解
A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 【洛谷】xht模拟赛 题解
前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...
- 10.9 guz模拟题题解
感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...
随机推荐
- android中的属性资源
属性资源可以很好的控制自定义View组件的外观行为. 属性资源放置在/res/values目录下,属性资源文件的根目录元素是<resources.../>,该元素包含如下两个子元素: at ...
- Razor页面之添加TagHelper
1.右键项目-----添加------新建项 2.创建Razor试图导入 (Razor View Imports) 3.在创建的_ViewImports.cshtml中添加 @AddTagHelpe ...
- delphi 任务栏按钮闪烁(转)
如果您创建的应用程序是运行在Windows 98或更高版本操作系统上,您可以通过调用API函数FlashWindowEx并赋给它一个FlashWInfo结构体来实现. 而如果是运行在Windows ...
- NX二次开发-打开弹出当前part所在的文件夹
#include <uf.h> #include <uf_part.h> #include <atlstr.h> #include <iostream> ...
- Java-Class-@I:org.apache.ibatis.annotations.Mapper
ylbtech-Java-Class-@I:org.apache.ibatis.annotations.Mapper 1.返回顶部 2.返回顶部 1. package com.ylbtech.ed ...
- CSS3:CSS3 背景
ylbtech-CSS3:CSS3 背景 1.返回顶部 1. CSS3 背景 CSS3 背景 CSS3中包含几个新的背景属性,提供更大背景元素控制. 在本章您将了解以下背景属性: background ...
- 杂项:CSS3
ylbtech-杂项:CSS3 1.返回顶部 1. CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型.列表模块. ...
- HDU-1226-超级密码-队列+广搜+大数取模
Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进制的数,并且只能由给定的M个数字构成,同 ...
- UVA 12676 Inverting Huffman
题目链接:https://vjudge.net/problem/UVA-12676 题目大意 一串文本中包含 N 个不同字母,经过哈夫曼编码后,得到这 N 个字母的相应编码长度,求文本的最短可能长度. ...
- Comet OJ - 2019 六一欢乐赛
传送门 #A: 思路:等差数列求和,看成俩次1+2+…+ n,多加的n减去,所以 ans = n*(n+1) - n. AC代码: #include<iostream> #include& ...