Potentiometers

题意:

线段树的单点修改,区间查询

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<1|1
#define All 1,N,1
#define read freopen("in.txt", "r", stdin)
#define N 200010
const ll  INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod =  1000000007;
int num[N<<2],n,q;
void pushup(int rt){
    num[rt]=num[rt<<1]+num[rt<<1|1];
}
void build(int l,int r,int rt){
    if(l==r){
        scanf("%d",&num[rt]);
        return;
    }
    int m=(l+r)>>1;
    build(lson);
    build(rson);
    pushup(rt);
}
void update(int p,int b,int l,int r,int rt){
    if(l==r){
        num[rt]=b;
        return;
    }
    int m=(l+r)>>1;
    if(p<=m)update(p,b,lson);
    else update(p,b,rson);
    pushup(rt);
}
int query(int L,int R,int l,int r,int rt){
        if(L<=l&&R>=r){
            return num[rt];
        }
        int m=(l+r)>>1;
       int sum=0;
       if(L<=m)sum+=query(L,R,lson);
       if(R>m)sum+=query(L,R,rson);
       pushup(rt);
      return sum;
}
int main()
{
    char s[4];
    int a,b,cas=0;
    while(~scanf("%d",&n)&&n){
            cas++;
        if(cas!=1)printf("\n");
        build(1,n,1);
        printf("Case %d:\n",cas);
        while(~scanf("%s",s)){
                if(s[0]==‘E‘)
                break;
            else if(s[0]==‘M‘){
                    scanf("%d%d",&a,&b);
                printf("%d\n",query(a,b,1,n,1));
            }
            else if(s[0]==‘S‘){
                scanf("%d%d",&a,&b);
                update(a,b,1,n,1);
            }
        }
    }
return 0;
}
时间: 2024-10-14 06:52:25

Potentiometers的相关文章

UVA 2191 Potentiometers

题意很简单:就是输入先n个数字,然后进行一系列操作!            S num sum 就是将第num个数字的值改成sum:            M a b 就是求从位置a到位置b的数字的和! 这个题基本就是一个裸的树状数组,直接使用树状数组,然后根据题意打出对应的代码即可!再注意一下细节应该就能AC了!!! 代码如下: #include<iostream> #include<cstdio> #include<cstring>//UVA 2191 Potent

LA2191:Potentiometers(树状数组)

题意: 先给出一个数组,然后有两个操作 S x y 把第x个数改成y M x y计算x~y个数的和 思路: 普通的树状数组,但不知道为什么会莫名其妙的一直WA #include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include &

uva 12086 - Potentiometers

是一道树状数组的模板题 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <iostream> 5 int b[300000],a[300000],n; 6 int lowbit(int x) 7 { 8 return x&(-x); 9 } 10 int sum(int x) 11 { 12 int sum=0; 13 while(x>0)

uva 12086 - Potentiometers (树状数组)

就是树状数组的模板就可以,但是 特别注意一点,树状数组中的C数组不清零,就会导致出错. #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; const int maxn = 200010; int c[maxn]; int a[maxn]; int n; int lowbit(int x) { return x&(-

PID控制器(比例-积分-微分控制器)- IV

调节/测量放大电路电路图:PID控制电路图 如图是PlD控制电路,即比例(P).积分(I).微分(D)控制电路. A1构成的比例电路与环路增益有关,调节RP1,可使反相器的增益在0·5一∞范围内变化; A2是积分电路,积分时间常数可在22一426S范围内变化; A3是微分电路,时间常数由Cl(Rl+R(RP3))决定; A4将比例.积分.微分各电路输出倒相后合成为U. Controller Circuit This circuit is the basis of a temperature co

PID控制器(比例-积分-微分控制器)- V

Linear Actuator - PID Control Introduction This application guide is designed to explain the basics of PID control and how to implement a basic control loop using Phidgets. Once implemented, the control loop will allow the linear actuator to move to

SPI应用 用SPI控制一个数字电位器

Controlling a Digital Potentiometer Using SPI In this tutorial you will learn how to control the AD5206 digital potentiometer(数字电位计) using Serial Peripheral Interface (SPI). For an explanation of SPI see the SPI Library reference. Digital potentiomet