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 ...
随机推荐
- 表单相关标签之textarea,select
textarea <textarea rows="3" cols="20"> 在w3school,你可以找到你所需要的所有的网站建设教程. < ...
- 【mmall】Guava库学习Collections
参考链接 Guava库学习:学习Collections(三)Sets
- java SPI & spring factories
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.SPI是一种动态替换发现的机制, 比如有个接口,想运行时动态的给它添加实现,你只需要添加 ...
- pythonの连接MySQL数据库
1.要确保开发环境中安装了pymsql,如果没有安装那么在控制台输入: pip3 install pymysql 安装完成后,打开编辑器: #!/usr/bin/env python import p ...
- WebBrowser控件的NavigateToString()方法 参数 为中文时乱码问题的解决。
public static string ConvertExtendedASCII(string HTML) { StringBuilder str = new StringBuilder(); ch ...
- TensorFlow学习笔记:保存和读取模型
TensorFlow 更新频率实在太快,从 1.0 版本正式发布后,很多 API 接口就发生了改变.今天用 TF 训练了一个 CNN 模型,结果在保存模型的时候居然遇到各种问题.Google 搜出来的 ...
- Springboot Session集群处理
在集群环境下,常见的基于Session的身份认证就会有一个问题,因为Session是跟着服务器走的,当用户在服务器1登陆成功后,当用户在访问服务器2的时候会因为服务器2没有用户的身份信息而再次跳转到认 ...
- Faster_RCNN 2.模型准备(上)
总结自论文:Faster_RCNN,与Pytorch代码: 本文主要介绍代码第二部分:model/utils , 首先分析一些主要理论操作,然后在代码分析里详细介绍其具体实现. 一. 主要操作 1. ...
- java虚拟机的堆内存配置
官网文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 接录如下: -XX:MaxHeapSize=si ...
- Python os.access() 方法
概述 os.access() 方法使用当前的uid/gid尝试访问路径.大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试. 语法 access()方法语法格式如 ...