cf round546 cde
第一题会卡一下同时用set和cin。。
其他的注意下矩阵对角线下标的应用即可
#include<bits/stdc++.h>
using namespace std;
#define maxn 2005
int mp1[maxn][maxn],n,m,mp2[maxn][maxn];
vector<int>s1[maxn],s2[maxn];
int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp1[i][j]),s1[i+j].push_back(mp1[i][j]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp2[i][j]),s2[i+j].push_back(mp2[i][j]); for(int i=;i<=n+m;i++){
sort(s1[i].begin(),s1[i].end());
sort(s2[i].begin(),s2[i].end());
if(s1[i]!=s2[i]){
puts("NO");
return ;
}
}
puts("YES");
}
/*
问题可转化为有多少个点可以把最后一个点(n)推移上来
按位置将所有点排序,建立一个集合s
起初将最后一个点放在集合里,然后倒序访问之前的结点,
如果结点i可以将n推上来,那么之后的结点j再要将n推上来时就不用考虑i,
否则需要考虑j是否可以推到i后面,再然后将n推上来
如果之前结点i有边到达集合里的所有点,那么这个结点就可以把点n推上来,
如果不行,这个点i放入集合中
复杂度分析:每条边都会在集合里判断一次,mlogn
*/
#include<bits/stdc++.h>
#include<set>
using namespace std;
#define maxn 500005
int m,n,pos[maxn],id[maxn];
set<int>s,G[maxn];
set<int>::iterator it; int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
scanf("%d",&id[i]),pos[id[i]]=i;
int u,v;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
G[u].insert(v);
} int ans=;
s.insert(id[n]);
for(int i=n-;i>=;i--){
int cur=id[i],flag=;
for(it=s.begin();it!=s.end();it++)
if(G[cur].find(*it)==G[cur].end()){
flag=;
s.insert(cur);
break;
}
if(!flag)ans++;
}
cout<<ans<<endl;
}
e也太难了。。留个坑吧
补坑。。区间覆盖线段树调了半天,最后发现有个地方没写long long ...气死我了.
所以总结一下,,区间覆盖和区间更新的pushdown还是有点差距的,,还有本题的lazy初始值要设为INF
/*
给定数组a1...an, k1...kn-1
两种操作:
第一种为ai+x,完成本次操作后若ai+1<ai+ki,则ai+1=ai+ki,以此类推
即后面的数不得小于前面的数+ki
第二种为求和操作
推导公式可得a1<=a2-sumk1<=a3-sumk2<=a4-sumk3...<=an-sumkn-1
令 bi=ai-sumki-1
b1<=b2<=b3<=b4...<=bn
ai+x <=> bi+x,同时所有在bi后面且小于bi+x的数都要变成bi+x
所以直接用lower_bound找到第一个不小于bi+x的数
用线段树维护bi,进行区间覆盖操作
query时先query 区间bi的和,再使用前缀和求出区间sumki的值
注意lazy
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define ll long long
ll n,m,a[maxn],k[maxn],b[maxn],sumk[maxn],sumkk[maxn];
#define INF 1e18
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
ll sum[maxn<<],lazy[maxn<<];
inline void pushup(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
}
inline void pushdown(int l,int r,int rt){
if(lazy[rt]!=INF+){
int m=l+r>>;
sum[rt<<]=lazy[rt]*(m-l+);
sum[rt<<|]=lazy[rt]*(r-m);
lazy[rt<<]=lazy[rt];
lazy[rt<<|]=lazy[rt];
lazy[rt]=INF+;
}
}
void build(int l,int r,int rt){
lazy[rt]=INF+;
if(l==r){sum[rt]=b[l];return;}
int m=l+r>>;
build(lson);build(rson);
pushup(rt);
}
void modify(int L,int R,ll val,int l,int r,int rt){
if(L<=l&&R>=r){
lazy[rt]=val;sum[rt]=val*(r-l+);
return;
}
pushdown(l,r,rt);
int m=l+r>>;
if(L<=m)modify(L,R,val,lson);
if(R>m)modify(L,R,val,rson);
pushup(rt);
} ll query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r)return sum[rt];
pushdown(l,r,rt);
int m=l+r>>;
ll res=;
if(L<=m)res+=query(L,R,lson);
if(R>m)res+=query(L,R,rson);
return res;
}
void add(int i,ll val){
if(val==)return;
ll cur=query(i,i,,n,)+val;//查询第l个点当前值
int l=i,r=n,mid,ans=l;//查询最右边的比cur小的数
while(l<=r){
mid=l+r>>;
if(query(mid,mid,,n,)<cur)
ans=mid,l=mid+;
else r=mid-;
}
modify(i,ans,cur,,n,);
}
int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
for(int i=;i<n;i++)cin>>k[i];
for(int i=;i<=n;i++)sumk[i]=sumk[i-]+k[i-];
for(int i=;i<=n;i++)b[i]=a[i]-sumk[i];
for(int i=;i<=n;i++)sumkk[i]=sumkk[i-]+sumk[i];
build(,n,);
cin>>m;
while(m--){
char op[];ll l,r;
cin>>op>>l>>r;
if(op[]=='+')add(l,r);
else cout<<query(l,r,,n,)+sumkk[r]-sumkk[l-]<<"\n";
}
return ;
}
cf round546 cde的更多相关文章
- cf round599 CDE
C:结论题:设n=k*p1+r=a*p2+b,只要n有两个及以上质因子,那么必然可以用第一个质因子表示出第二个质因子,所以答案是1 反之显然是其最小质因子 /* 1 2 3 4 1 3 2 4 n的所 ...
- petrozavodsk summer 2018 游记&&总结
day0: 出发前训了一场比较水bapc2017保持手感(恢复信心),成功AK了,不过罚时略高.然后三人打车从紫金港到杭州东站,坐高铁到上海虹桥,再坐机场快线到浦东机场(傻乎乎的jsb帮爸爸付了钱,然 ...
- CF 987
毒瘤啊啊啊啊啊 虽然排名还不错,331,但是B我没做出来...... 这是战绩: 可以看到我大发神威势如破竹的A了CDE,但是B把我卡了三次...不然我就能进前300了(还是很水). 逐一分析题目: ...
- 关于cf[转]
还不怎么熟悉cf呢.. 你应当知道的关于Codeforces的事情 Codeforces简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏).网址: codeforces.com 这是一个俄国 ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
随机推荐
- python3: print()函数:def,end关键字介绍
print()函数是最最普通常见的函数,我们常用的方式为类似这种的没有任何设置的“ print("今天是个好日子") ” 的简单输出. 其实print()函数中含有如下几个关键字, ...
- 【try..catch..】【判断输入是否为空】【onchange事件】【onmouseover和onmouseout事件】【onmousedown和onmouseup事件】
1.try..catch.. <body><script>function myFunction(){try{ var x=document.getElementById(&q ...
- TCC
严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达 ...
- Git坑点——remote: error: GH007: Your push would publish a private email address.
使用命令:git push -u origin master ,把本地库的内容推送到远程库的过程中,出现了问题 ——remote: error: GH007: Your push would pu ...
- JSP表达式语音EF--2
JSP 表达式语言 | 菜鸟教程 http://www.runoob.com/jsp/jsp-expression-language.html
- MySql cmd下的学习笔记 —— 有关视图的操作(建立表)
在查询中,我们经常把查询结果当成临时表 view可以看成是一张虚拟表,是表通过某种运算得到的一个投影 在建立视图时,不需要指定视图的列名与列类型 红框内的为select选择语句 蓝框内的与建表语句类似 ...
- linux系统 之 git
1,git是啥? 最流行的分布式版本控制系统,在高度易用的同时,仍然保留着初期设定的目标.它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求. ...
- 图片转换base64编码,点击div的时候选择文件
有时候我们希望文件上传的时候预览图片,下面插件可以实现上传前预览图片 (也可以提取文件的base64编码) max-height: 140px;max-width: 120px;可以指定图片的最大宽度 ...
- Fragment和FragmentActivity的使用方法
认识:首先我们知道Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容.模块化这些UI面板以便提供给其他Acitivity使用便利.同时我们显示的Fragment也会受到当前 ...
- kali2.0的初始设置
1.修改源 leafpad /etc/apt/sources.list 加kali源 deb http://http.kali.org/kali kali-rolling main non-free ...