士兵杀敌(1): http://acm.nyist.net/JudgeOnline/problem.php?pid=108

分析:前缀和

 #include <bits/stdc++.h>

 using namespace std;

 int a[];
int sum[]; int main()
{
int n,m;
scanf("%d%d",&n,&m); sum[] = ;
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
sum[i] = sum[i-] + a[i];
} while(m--) {
int m,n;
scanf("%d%d",&m,&n);
if(m>n)
swap(m,n);
printf("%d\n",sum[n]-sum[m-]); } return ;
}

士兵杀敌(2):http://acm.nyist.net/JudgeOnline/problem.php?pid=116

分析:树状数组(单点更新,区间求和)

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = +;

 int C[maxn];
int n,m; int lowbit(int x) {
return x&-x;
} //A[1] + A[2] + ... + A[x]
int sum(int x) {
int ret = ;
while(x>) {
ret +=C[x];
x-=lowbit(x);
}
return ret;
} //A[x] +=d;
void add(int x,int d) {
while(x<=n) {
C[x] +=d;
x+=lowbit(x);
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
int x;
scanf("%d",&x);
add(i,x);
} char cmd[];
for(int i=;i<m;i++) {
scanf("%s",cmd);
if(cmd[]=='A')
{
int x,d;
scanf("%d%d",&x,&d);
add(x,d);
}
else {
int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",sum(v)-sum(u-));
}
} return ;
}

士兵杀敌(3):http://acm.nyist.net/JudgeOnline/problem.php?pid=119

分析:RMQ

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = ;

 struct RMQ {

     int dmin[maxn][];
int dmax[maxn][]; void RMQ_init(const vector<int>& A) {
int n = A.size();
for(int i=;i<n;i++)
{
dmin[i][] = A[i];
dmax[i][] = A[i];
} for(int j=;(<<j)<=n;j++) {
for(int i=;i+(<<j)-<n;i++) {
dmin[i][j] = min(dmin[i][j-],dmin[i+(<<(j-))][j-]);
dmax[i][j] = max(dmax[i][j-],dmax[i+(<<(j-))][j-]);
}
}
} int RMQ_min(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
return min(dmin[L][k],dmin[R-(<<k)+][k]);
} int RMQ_max(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
int ans = max(dmax[L][k],dmax[R-(<<k)+][k]);
return ans;
} }sol; int main()
{
int n,m;
scanf("%d%d",&n,&m);
vector<int> v;
for(int i=;i<n;i++) {
int x;
scanf("%d",&x);
v.push_back(x);
}
sol.RMQ_init(v); for(int i=;i<m;i++) {
int l,r;
scanf("%d%d",&l,&r);
l--;r--;
printf("%d\n",sol.RMQ_max(l,r)-sol.RMQ_min(l,r));
} return ;
}

士兵杀敌(4):http://acm.nyist.net/JudgeOnline/problem.php?pid=123

分析:区间更新,单点查询;

线段树超时,要优化线段树,线段树这么高级,我可不会改板子啊 (*^__^*)

解法:利用树状数组的逆过程!!!

add的时候,就把路上的C[x] 全都加上;(add(qR,v);add(qL-1,v))

询问的时候,往右上走,看看总共有多少给这个点产生了影响;

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = +;
int C[maxn];
int m,t;
int lowbit(int x)
{
return x&-x;
} void add(int star,int num) {
while(star>) {
C[star]+=num;
star-=lowbit(star);
}
} int sum(int star) {
int sum = ;
while(star<=m) {
sum+=C[star];
star+=lowbit(star);
}
return sum;
} int main()
{
scanf("%d%d",&t,&m);
while(t--) {
char cmd[];
scanf("%s",cmd);
if(cmd[]=='A') {
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
add(v,c);
add(u-,-c);
}
else {
int pos;
scanf("%d",&pos);
printf("%d\n",sum(pos));
}
} return ;
}

士兵杀敌(5):http://acm.nyist.net/JudgeOnline/problem.php?pid=228

分析:区间更新,线段查询;

线段树又超时了 (ノへ ̄、)

解法:巧用数组,记录下来每个区间的更新的起点,和结束的起点,然后累加计算出正确数组;

再求一个前缀和;

 /*
#include <bits/stdc++.h> using namespace std; const int maxnode = 1000001<<2;
int _min,_max,_sum;
int qL,qR,v; struct IntervalTree
{
int sumv[maxnode], minv[maxnode], maxv[maxnode], addv[maxnode];
void maintain(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
sumv[o] = minv[o] = maxv[o] = 0;
if(R > L)
{
sumv[o] = sumv[lc] + sumv[rc];
minv[o] = min(minv[lc], minv[rc]);
maxv[o] = max(maxv[lc], maxv[rc]);
}
if(addv[o])
{
minv[o] += addv[o];
maxv[o] += addv[o];
sumv[o] += addv[o] * (R-L+1);
}
} void update(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
if(qL <= L && qR >= R)
{
addv[o] += v;
}
else
{
int M = L + (R-L)/2;
if(qL <= M) update(lc, L, M);
if(qR > M) update(rc, M+1, R);
}
maintain(o, L, R);
} void query(int o, int L, int R, int add)
{
if(qL <= L && qR >= R)
{
_sum += (sumv[o] + add * (R-L+1))%10003;
_min = min(_min, minv[o] + add);
_max = max(_max, maxv[o] + add);
}
else
{
int M = L + (R-L)/2;
if(qL <= M) query(o*2, L, M, add + addv[o]);
if(qR > M) query(o*2+1, M+1, R, add + addv[o]);
}
} }tree; int main()
{
int n,c,q;
scanf("%d%d%d",&n,&c,&q);
while(c--) {
scanf("%d%d%d",&qL,&qR,&v);
tree.update(1,1,n);
} while(q--) {
_sum = 0;
scanf("%d%d",&qL,&qR);
tree.query(1,1,n,0);
printf("%d\n",_sum);
} return 0;
}
*/ #include <bits/stdc++.h> using namespace std; const int maxn = ;
int num[maxn]; int main()
{
int n,c,q;
memset(num,,sizeof(num));
scanf("%d%d%d",&n,&c,&q);
for(int i=;i<c;i++) {
int l,r,v;
scanf("%d%d%d",&l,&r,&v);
num[l]+=v;
num[r+]-=v;
} for(int i=;i<=n;i++) {
num[i]+=num[i-];
} for(int i=;i<=n;i++) {
num[i]=(num[i]+num[i-])%;
}
while(q--) {
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",(num[r]-num[l-]+)%);
} return ;
}

NYOJ 士兵杀敌(1~5)的更多相关文章

  1. NYOJ 士兵杀敌(三)

    描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌 ...

  2. NYOJ 119 士兵杀敌(三) RMQ ST

    NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...

  3. NYOJ 116 士兵杀敌 (线段树,区间和)

    题目链接:NYOJ 116 士兵杀敌 士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的 ...

  4. nyoj 108 士兵杀敌(一)

    点击打开链接 士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师, ...

  5. NYOJ 123 士兵杀敌4-树状数组的插线求点

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...

  6. nyoj 119 士兵杀敌(三)(RMQ)

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...

  7. nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...

  8. nyoj 116 士兵杀敌(二)【线段树单点更新+求和】

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...

  9. nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...

随机推荐

  1. 缓存方案:本地guavaCache, 远程redis?

    线程内部缓存:a. 局部变量HashMap, 方法间传递  b. 使用ThreadLocal 本地缓存:单jvm内共享 可以使用(Concurrent)HashMap自己实现,也可以使用GuavaCa ...

  2. python练习六十一:文件处理,读取文件内容

    python练习六十一:文件处理,读取文件内容 假设要读取text.txt文件中内容 写文件(如果有文件,那直接调用就行,我这里自己先创建的文件) list1 = ['python','jave',' ...

  3. docker+ bind mount 部署复杂flask应用

    报错如下: [root@test-wenqiang flask-skeleton]# docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask ...

  4. 浅谈APP消息推送

    作为移动端APP产品运营最重要的运营手段,消息推送(push)被越来越多的APP厂商所重视,在信息泛滥的移动互联网时代,手机APP应用安装得越来越多,小小的手机屏幕每天收到的消息推送也越来越多,站在用 ...

  5. DB Intro - MySQL and MongoDB

    mysql> CREATE TABLE tutorials_tbl( tutorial_id INT, tutorial_title VARCHAR(100), tutorial_author ...

  6. 性能测试工具LoadRunner26-LR之lr脚本插入DOS命令

    基础命令 1.dir 无参数:查看当前所在目录的文件和文件夹 /s:查看当前目录其所有子目录的文件和文件夹 /a:查看包括隐含文件的所有文件 /ah:只显示隐含文件 /w:以紧凑方式显示文件和文件夹 ...

  7. Murano Weekly Meeting 2016.07.19

    Meeting time: 2016.July.19 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  8. 牛客网Java刷题知识点之字符流缓冲区、BufferedWriter、BufferedReader、BufferedReader-readLine方法原理、自定义MyBufferedReader-read方法、自定义MyBufferedReader-readLine方法

    不多说,直接上干货! 把提高效率的动作,封装成一个对象.即把缓冲区封装成一个对象. 就是在一个类里封装一个数组,能对流锁操作数据进行缓存. 什么是字符流缓冲区? 善于使用字符流缓冲区,减轻负担,提高下 ...

  9. 学习用node.js建立一个简单的web服务器

    一.建立简单的Web服务器涉及到Node.js的一些基本知识点: 1.请求模块 在Node.js中,系统提供了许多有用的模块(当然你也可以用JavaScript编写自己的模块,以后的章节我们将详细讲解 ...

  10. 几个单元素Loading动画解构

    这个账号建了也有1个多月,拖延症患者终于下定决心开始写博.做前端从前至后差不多1年时间,如果文中有什么纰漏欢迎指出,未来的路还很长~ 第一篇文章用来解构几个挺不错的单元素Loading动画.效果图如下 ...