1. 程式人生 > >zoj 3279【樹狀陣列+二分】

zoj 3279【樹狀陣列+二分】

 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3618

很蛋疼,用cin輸入字母竟然TLE!!!鄙視

#include<iostream>
#include<vector>
#include<map>
#include<stack>
#include<algorithm>
#include<queue>
#include<list>
#include<set>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<ctype.h>
#include<iomanip>

using namespace std;

#define LL long long
#define pi acos(-1)
#define N 100010
#define INF 999999999
#define eps 1e-8
//****************************************
//zoj 3279
//
[email protected]
All rights reserved. //**************************************** int level[N],tree[N]; int n; int lowbit(int t) { return t&(-t); } void update(int pos,int num) { while(pos<=n) { tree[pos]+=num; pos+=lowbit(pos); } } int sum(int i) { int tot=0; while(i>0) { tot+=tree[i]; i-=lowbit(i); } return tot; } int find(int a) { int i,j,k; int low=1,up=n,mid; while(low<=up) { mid=(low+up)>>1; if(sum(mid)>=a) { up=mid-1; } else low=mid+1; } return low; } char str[10]; char c[100]; int main() { //freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF) { int i; for(i=0;i<=n;i++)tree[i]=0; for(i=1;i<=n;i++) { scanf("%d",&level[i]); update(i,level[i]); } int m; scanf("%d",&m); while(m--) { scanf("%s",str); if(str[0]=='p') { int a,b; scanf("%d%d",&a,&b); update(a,-level[a]); level[a]=b; update(a,level[a]); } if(str[0]=='q') { int a; scanf("%d",&a); printf("%d\n",find(a)); } } } return 0; }


相關推薦

zoj 3279陣列+二分

 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3618很蛋疼,用cin輸入字母竟然TLE!!!#include<iostream> #include<vector> #inclu

CodeForces540E陣列+二分

思路: 1:變換的做一次樹狀陣列求逆序就好了 2:然後就是對於變換的求前面有多少個比他大,後面有多少個比他小 具體: 對於當前位置,前面有多少比他大,然後減去被佔多少位置(二分就好) 對於後面位置,後面有多少比他小,然後減去被佔多少位置(二分就好)

HDU2852陣列+二分

額。。有點遺忘了樹狀陣列特性了。。印象中一直是字首和,然後一定要記住樹狀陣列是把給出的值(值太大可能可以離散化)也就是點到了區間,然後這個點存的值就是由自己來定了。 題意: 百度。 思路: 樹狀陣列是用來標記的!值->區間點! 因為這裡值重複是算的,所有樹狀陣列存的是

動態主席ZOJ 2112陣列+主席

題意:       給定一個區間,求這個區間第k小的數,支援單點修改。   思路:       動態主席樹裸題。       我們先來回顧一下靜態主席樹的做法,對於陣列中每一個位置

BZOJ3155/LNSYOJ96 preprefix陣列x2做題報告

這道題是樹狀陣列+數學題,然而我數學並不好 題目描述 對於一個長度為nn的序列a1,a2,a3……ana1,a2,a3……an,其字首和(Prefix Sum)SiSi為前ii個元素的和,即∑k=1iai∑k=1iai。而字首和的字首和(Preprefix Sum)就是把字首和序列S1,S2,S3……Sn

LNSYOJ203最大值陣列應用做題報告+陣列深刻理解

這道題是一個典型的樹狀陣列查詢有幾個比某個數大/小的數的應用 題目描述    給定NN個區間,選定一個固定整數值TT,對於一個區間[ai,bi][ai,bi]. 如果T<aiT<ai,那麼T在這個區間的得分為X, 如果T>biT>bi,那麼T在這個區間的得分為Z, 如果ai≤

牛客練習賽7 E 題 珂朵莉的數列 陣列 + 思維

傳送門 //對於一個數n, 它有n*(n+1)/2個子區間, 問這些子區間的逆序對數之和. //那麼這個區間問題一般都是計算貢獻問題, 所以先分析問題如果有 i < j 且 a[i] > a[j] 那麼區間1<= l <=i, j &

HDU 5592 ZYB's Game 陣列+二分

<題目連結> 題目大意: 給你一個由1~n,n個數組成的序列,給出他們每個的字首逆序數,現在要求輸出這個序列。 解題分析: 由字首逆序數很容易能夠得到每個數的逆序數。假設當前數是i,它前面比它小的數為a[i]( i - 1 - i的逆序數即可),我們不難知道,i在前i個數中是第i+1大的。

ZOJ-3279 Ants 數組 + 二分

char 前綴 owb ons 修改 using print tps clu 題目鏈接: https://cn.vjudge.net/problem/ZOJ-3279 題目大意: 有1到n 那個level 每一個level有a[i]只螞蟻兩種操作 p a b 把第a個le

UOJ276 [清華集訓2016] 汽水 二分答案點分治數組

答案 很多 right turn lower pair first upper sizeof 題目分析: 這種亂七八糟的題目一看就是點分治,答案有單調性,所以還可以二分答案。 我們每次二分的時候考慮答案會不會大於等於某個值,註意到系數$k$是無意義的,因為我們可以通過轉化使

11.2校內測試矩陣字首和陣列逆序對(題意轉換)

Solution 簽到水題,直接狀壓列舉所有情況算出答案即可。 Code #include<bits/stdc++.h> #define LL long long using namespace std; inline LL read() { LL x =

區間偶數異或和好題離線陣列字首和前驅思想

【連結】 http://hznu.club/OJ/problem.php?cid=1227&pid=2 【題意】 求區間出現偶數次的數的異或和 【思路】 首先,沒有修改,可以離線查詢,減少複雜度。 其次,我們容易知道的是:區間出現奇數次的數的異或和,即為區間異或和。

題解 P3374 模板陣列 1

恩,這是AC的第一道樹狀陣列呢。 本蒟蒻以前遇到RMQ問題一般都用線段樹或ST表,可惜ST表不支援線上修改,而線段樹程式碼量又太大。 如今終於找到了折中方案:樹狀陣列!!!!程式碼量小,還支援修改!   樹狀陣列也就是二叉索引樹,又被稱為Fenwick樹,然而我個人認為它不能被嚴謹地成為

DNA Evolution CodeForces - 828E(827C)陣列

題目連結   很難的一道題吧,算是挺難了,就是想到挺複雜,作為我這麼個Ju蒻來說。   題目給你一串字串,是初始的字串,然後告訴你一系列操作,問你: (一)、改變點Xi上的字元; (二)、查詢【l,r】區間上的對應與新給的字串匹配的個數是幾個?例如“ACGTC

codeforce828E. DNA Evolution陣列統計貢獻

文章目錄 題目連結: 題目連結: http://codeforces.com/problemset/problem/828/E 題意:先給一個DNA序列,然後有兩種操作 操作1:把 x 位置的鹼基改成 c 操作2:給一個 L 和一個 R ,以及

REQ CodeForces - 594D陣列+離線查詢+區間思維

題目連結   很好的一道題,昨晚上推的,今天由於程式碼能力太弱敲了半天,再不斷的找到自己思維的BUG,於是RE了一發、T了一發、WA了一發,就Ac了,還不錯,那我們來講解一下題目的思路。   我們知道對於一個值的尤拉函式值,就是它的值去乘上它所有的質數-1除以質數:如

歷屆試題 小朋友排隊陣列

  歷屆試題 小朋友排隊   時間限制:1.0s   記憶體限制:256.0MB 問題描述   n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。   每個小朋友都有一個不高興的程度。開始的時候,所有小朋友的不高興程度

CHOJ 4201 樓蘭圖騰陣列

描述 在完成了分配任務之後,西部314來到了樓蘭古城的西部。相傳很久以前這片土地上(比樓蘭古城還早)生活著兩個部落,一個部落崇拜尖刀(‘V’),一個部落崇拜鐵鍬(‘∧’),他們分別用V和∧的形狀來代表各自部落的圖騰。 西部314在樓蘭古城的下面發現了一幅巨大的壁畫,壁畫上被

2016 大連區域賽 現場賽 E—Aninteresting game陣列

Aninteresting game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 120    Acce

BZOJ P1103 「POI2007」大都市megdfs序陣列+差分

#include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include &