[Codeforces]Codeforces Round #489 (Div. 2)
Nastya and an Array
输出有几种不同的数字
#pragma comment(linker, "/STACK:102400000,102400000")
#ifndef ONLINE_JUDGE
#include "stdafx.h"
#else
#include<bits/stdc++.h>
#endif
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} int p[], q[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, x;
cin >> n;
int ans = ;
for (int i = ; i < n; i++) {
cin >> x;
if (x > ) {
if (!p[x]) ans++;
p[x] = true;
}
if (x < ) {
if (!q[-x]) ans++;
q[-x] = true;
}
}
cout << ans << endl;
return ;
}
Nastya Studies Informatics
把y/x分解质因数,a和b各自占有一部分且不重复
#pragma comment(linker, "/STACK:102400000,102400000")
#ifndef ONLINE_JUDGE
#include "stdafx.h"
#else
#include<bits/stdc++.h>
#endif
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} bool f[];
int p[]; int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
memset(f, true, sizeof(f));
f[] = f[] = false;
for (int i = ; i < ; i++) {
for (int j = i + i; j < ; j += i) f[j] = false;
}
int l, r, x, y;
cin >> l >> r >> x >> y;
if (y % x != ) {
cout << << endl;
return ;
}
int m = y / x, sz = ;
for (int i = ; i < ; i++) {
if (m == ) break;
if (!f[i]) continue;
if (m % i == ) {
int tmp = ;
while (m % i == ) {
m /= i;
tmp *= i;
}
p[sz++] = tmp;
}
}
if (m != ) p[sz++] = m;
m = y / x;
int ans = ;
for (int i = ; i < ( << sz); i++) {
int a = , b;
for (int j = ; j < sz; j++) {
if (i & ( << j)) a *= p[j];
}
b = m / a;
if (l <= a * x && a * x <= r && l <= b * x && b * x <= r) ans++;
}
cout << ans << endl;
return ;
}
Nastya and a Wardrobe
每次x2-0.5
#pragma comment(linker, "/STACK:102400000,102400000")
#ifndef ONLINE_JUDGE
#include "stdafx.h"
#else
#include<bits/stdc++.h>
#endif
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} inline lint pow(lint a, lint b, lint p) {
lint rtn = ;
while (b) {
if (b & ) rtn = rtn * a % p;
a = a * a % p;
b >>= ;
}
return rtn;
} int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
lint x, k;
cin >> x >> k;
lint p = ;
if (k == ) {
cout << (x * % p) << endl;
return ;
}
if (x == ) {
cout << << endl;
return ;
}
lint a = pow(, k, p) * (x % p) % p, b = pow(, k - , p);
//a-b+0.5->2a-2b+1
cout << (( * a - * b + ) % p + p) % p << endl;
return ;
}
/*
2(2x - 0.5) - 0.5
2x - 0.5 1
4x - 1.5 2
8x - 3.5 4
16x - 7.5 8
32x - 15.5 16
*/
Nastya and a Game
枚举左端点然后依次往右找,对于一段连续的1可以根据范围直接判断。因为S的最大值不超过2*10^18,所以向右找的次数不超过120次。
#pragma comment(linker, "/STACK:102400000,102400000")
#ifndef ONLINE_JUDGE
#include "stdafx.h"
#else
#include<bits/stdc++.h>
#endif
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} lint a[], s[];
int r[];
double ln[];
double inf = log(1LL << ); int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
int n, k;
cin >> n >> k;
s[] = ;
for (int i = ; i <= n; i++) {
cin >> a[i];
s[i] = s[i - ] + a[i];
ln[i] = log(a[i]);
}
for (int i = n; i >= ; i--) {
if (a[i] == ) {
if (a[i + ] == ) r[i] = r[i + ];
else r[i] = i;
}
}
lint ans = ;
if (k == ) ans = n;
for (int i = ; i <= n; i++) {
int j = i + ;
lint m = a[i];
double p = ln[i];
while (j <= n) {
if (a[j] == ) {
if (m % k == ) {
lint tmp = m / k;
if (s[j] - s[i - ] <= tmp && tmp <= s[r[j]] - s[i - ]) ans++;
}
j = r[j] + ;
} else {
if (p + ln[j] >= inf) break;
p += ln[j];
m *= a[j];
if (m == (s[j] - s[i - ])*k) ans++;
j++;
}
}
}
cout << ans << endl;
return ;
}
Nastya and King-Shamans
两个线段树,一个维护sum,一个维护max。对每个询问,如果a[1]=0直接输出1,否则令m=1,显然此时[1,m]里没有萨满王。对于m之后的,想成为萨满王其能力值至少为sum(1,m),找到第一个满足条件的萨满p,判断p是不是萨满王,如果不是则令m=p,直到找到或确定没有。
#pragma comment(linker, "/STACK:102400000,102400000")
#ifndef ONLINE_JUDGE
#include "stdafx.h"
#else
#include<bits/stdc++.h>
#endif
using namespace std;
typedef long long lint;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef queue<int> QI;
typedef map<int, int> MII; void makedata() {
freopen("input.txt", "w", stdout);
fclose(stdout);
} lint a[];
int n, q;
template <typename T> class SegmentTree {
/*
type:
0:sum
1:max
*/
private:
T *data, *lazy;
int type;
void pushup(int rt) {
if (type == )
data[rt] = data[rt << ] + data[rt << | ];
else if (type == )
data[rt] = max(data[rt << ], data[rt << | ]);
}
void pushdown(int rt, T m) {
if (lazy[rt] == ) return;
lazy[rt << ] += lazy[rt];
lazy[rt << | ] += lazy[rt];
if (type == ) {
data[rt << ] += (m - (m >> )) * lazy[rt];
data[rt << | ] += (m >> ) * lazy[rt];
} else if (type == ) {
data[rt << ] += lazy[rt];
data[rt << | ] += lazy[rt];
}
lazy[rt] = ;
}
public:
SegmentTree(int n, int t) : data((T *)malloc((n << ) * sizeof(T))), lazy((T *)malloc((n << ) * sizeof(T))), type(t) {}
void Build(T * base, int l, int r, int rt) {
lazy[rt] = ;
if (l == r) data[rt] = base[l];
else {
int mid = (l + r) >> ;
Build(base, l, mid, rt << );
Build(base, mid + , r, rt << | );
pushup(rt);
}
}
void Modify(int l, int r, int rt, int L, int R, T v) {
if (L <= l && R >= r) {
lazy[rt] += v;
if (type == )
data[rt] += v * (r - l + );
else if (type == )
data[rt] += v;
return;
}
pushdown(rt, r - l + );
int mid = (l + r) >> ;
if (L <= mid)
Modify(l, mid, rt << , L, R, v);
if (R > mid)
Modify(mid + , r, rt << | , L, R, v);
pushup(rt);
}
T QueryPoint(int l, int r, int rt, int val) {
if (l == r) return data[rt];
pushdown(rt, r - l + );
int mid = (l + r) >> ;
T ret = ;
if (val <= mid) ret = QueryPoint(l, mid, rt << , val);
else ret = QueryPoint(mid + , r, rt << | , val);
pushup(rt);
return ret;
}
T QuerySegment(int l, int r, int rt, int L, int R) {
pushdown(rt, r - l + );
if (L == l && R == r) return data[rt];
int mid = (l + r) >> ;
if (R <= mid) return QuerySegment(l, mid, rt << , L, R);
if (mid < L) return QuerySegment(mid + , r, rt << | , L, R);
if (type == )
return QuerySegment(l, mid, rt << , L, mid) + QuerySegment(mid + , r, rt << | , mid + , R);
else if (type == )
return max(QuerySegment(l, mid, rt << , L, mid), QuerySegment(mid + , r, rt << | , mid + , R));
}
int find(int l, int r, int rt, int p, T x) {
if (r <= p) return -;
if (data[rt] < x) return -;
if (l == r) return l;
int mid = (l + r) >> ;
if (l > p) {
if (data[rt << ] >= x) return find(l, mid, rt << , p, x);
else return find(mid + , r, rt << | , p, x);
}
int rtn = find(l, mid, rt << , p, x);
if (rtn != -) return rtn;
return find(mid + , r, rt << | , p, x);
}
};
SegmentTree<lint> Tsum(, ), Tmax(, ); int main() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif
//makedata();
std::ios::sync_with_stdio(), cin.tie();
cin >> n >> q;
for (int i = ; i <= n; i++) cin >> a[i];
Tsum.Build(a, , n, );
Tmax.Build(a, , n, );
while (q--) {
int p;
lint x;
cin >> p >> x;
Tsum.Modify(, n, , p, p, x - a[p]);
Tmax.Modify(, n, , p, p, x - a[p]);
a[p] = x;
if (a[] == ) {
cout << << endl;
continue;
}
int m = ;
while () {
lint sum = Tsum.QuerySegment(, n, , , m);
int nex = Tmax.find(,n,,m,sum);
if (nex == -) {
cout << - << endl;
break;
}
if (a[nex] == Tsum.QuerySegment(, n, , , nex - )) {
cout << nex << endl;
break;
}
m = nex;
}
}
return ;
}
[Codeforces]Codeforces Round #489 (Div. 2)的更多相关文章
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
- Codeforces Beta Round #75 (Div. 2 Only)
Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...
- Codeforces Beta Round #74 (Div. 2 Only)
Codeforces Beta Round #74 (Div. 2 Only) http://codeforces.com/contest/90 A #include<iostream> ...
- Codeforces Beta Round #73 (Div. 2 Only)
Codeforces Beta Round #73 (Div. 2 Only) http://codeforces.com/contest/88 A 模拟 #include<bits/stdc+ ...
- Codeforces Beta Round #72 (Div. 2 Only)
Codeforces Beta Round #72 (Div. 2 Only) http://codeforces.com/contest/84 A #include<bits/stdc++.h ...
- Codeforces Beta Round #70 (Div. 2)
Codeforces Beta Round #70 (Div. 2) http://codeforces.com/contest/78 A #include<bits/stdc++.h> ...
随机推荐
- 【Codeforces 922D】Robot Vacuum Cleaner
[链接] 我是链接,点我呀:) [题意] 让你把n个字符串重新排序,然后按顺序连接在一起 使得这个组成的字符串的"sh"子序列最多 [题解] /* * 假设A的情况好于B * 也就 ...
- [BZOJ2120] 数颜色 && [bzoj2453] 维护队列(莫队 || 分块)
传送门 只有第一个,第二个权限题. 分块,然而wa,没看出来错在哪里,有时间再看. #include <cmath> #include <cstdio> #include &l ...
- 4种OSS的应用架构及核心技术
基础型 架构描述:OSS作为文件存储源,用户上传下载数据均经过ECS与OSS通信. 解决用户问题:文件空间大,ECS磁盘存储空间有限:多ECS间无法同步数据. 适用场景描述:文件较多,但文件调 ...
- 救命(洛谷 U4525)
题目背景 XS中学的校长积劳成疾,最终由于无聊而卧病在沙发.需要药(pi)水(gu)拯救他的生活. 题目描述 现在有n种药水,编号分别为1..n,能拯救校长的药水编号为n 每个药水都可以购买到,但有的 ...
- Linux下汇编语言学习笔记76 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Eclipse新建/导入Gradle项目
一.新建 1.[New]->[Project] 二.导入 1.[Import] 2. 参考: http://www.vogella.com/tutorials/EclipseGradle/art ...
- 简单解决 WIN10更新后 远程桌面提示 CredSSP加密Oracle修正的问题
更新WIN10后,打开远程桌面,提示: 以 管理员身份打开 cmd或者PowerShell,贴入: REG ADD HKLM\Software\Microsoft\Windows\CurrentVer ...
- 通过DaoCloud发布Ghost
首先参考这篇文章: http://docs-static.daocloud.io/daocloud-services/volume-controller 但是按照这篇文章,最后的主题是没有办法应用上去 ...
- CSDN博客怎样加入量子恒道统计?
CSDN博客申请专家通过后,能够加入量子恒道统计,这样就能够查看更加具体的訪问统计信息,而不不过一个訪问次数.达到专家级别了可能都是电脑高手了.这里班门弄斧了. 登录博客进入个人中心首页,点击管理博客 ...
- shell中获取时间,作为文件夹格式
近期写了一个小程序,须要用到时间.遍历作为文件夹的一部分 #!/bin/bash for i in {1..30} do date=`date +%Y/%m/%d -d " $i days ...