博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2852 KiKi's K-Number(离线+树状数组)
阅读量:5267 次
发布时间:2019-06-14

本文共 1884 字,大约阅读时间需要 6 分钟。

省赛训练赛上一题,貌似不难啊。当初,没做出。离线+树状数组+二分。

1 #include 
2 #include
3 #include
4 using namespace std; 5 #define N 100000 6 int p[100100]; 7 int qur[300001][3]; 8 int lowbit(int t) 9 {10 return t&(-t);11 }12 void insert(int t,int d)13 {14 while(t <= N)15 {16 p[t] += d;17 t += lowbit(t);18 }19 }20 int getsum(int t)21 {22 int sum = 0;23 while(t)24 {25 sum += p[t];26 t -= lowbit(t);27 }28 return sum;29 }30 int bin(int x)31 {32 int str,end,mid;33 if(x > getsum(N))34 return -1;35 str = 1;36 end = N;37 while(str < end)38 {39 mid = (str + end)/2;40 if(getsum(mid) < x)41 str = mid + 1;42 else43 end = mid;44 }45 return str;46 }47 int main()48 {49 int n,i;50 while(scanf("%d",&n)!=EOF)51 {52 memset(p,0,sizeof(p));53 for(i = 0;i < n;i ++)54 {55 scanf("%d",&qur[i][0]);56 if(qur[i][0] == 0||qur[i][0] == 1)57 scanf("%d",&qur[i][1]);58 else59 scanf("%d%d",&qur[i][1],&qur[i][2]);60 }61 for(i = 0;i < n;i ++)62 {63 if(qur[i][0] == 0)64 insert(qur[i][1],1);65 else if(qur[i][0] == 1)66 {67 if(getsum(qur[i][1])-getsum(qur[i][1]-1) > 0)68 insert(qur[i][1],-1);69 else70 printf("No Elment!\n");71 }72 else73 {74 int flag;75 flag = bin(getsum(qur[i][1])+qur[i][2]);76 if(flag == -1)77 printf("Not Find!\n");78 else79 printf("%d\n",flag);80 }81 }82 }83 return 0;84 }

 

转载于:https://www.cnblogs.com/naix-x/p/3253841.html

你可能感兴趣的文章
DirectShow OpenCV GDI+ 图形显示格式转换
查看>>
PHP利用FTP上传文件连接超时之开启被动模式解决方法
查看>>
rdesktop的使用
查看>>
each实现原理
查看>>
requests模块
查看>>
常用的Linux命令
查看>>
POJ 3624 Charm Bracelet
查看>>
php设计模式学习之工厂模式
查看>>
Freemarker 的基础使用 (一)
查看>>
window系统如何安装Git以及Git小乌龟,实现git命令
查看>>
瀑布流
查看>>
lintcode : find peak element 寻找峰值
查看>>
杭电oj平台上的11页题目代码:hdu-page11 (2070~2079)
查看>>
selenium webdriver 通信过程
查看>>
jQuery火箭图标返回顶部代码
查看>>
Python爬虫正则表达式常用符号和方法
查看>>
MYSQL 总结——1
查看>>
通过FTP无法删除文件
查看>>
Wannafly挑战赛1 C MMSet2 虚树
查看>>
Linux进程间通信方式--信号,管道,消息队列,信号量,共享内存
查看>>